Eclipse Vert.x 5的第一个候选版本发布了!!!
Vert.x 5是Vert.x 4.x系列的演进版本,它将为Vert.x带来关键新特性。这个版本的目标是为想要尝试它并提供反馈的人们提供即将到来的Vert.x 5的候选构建。
以下是这个新主要版本的亮点。
拥抱基于未来的模型
Vert.x 4将3.x的回调异步模型扩展到基于 Future 和回调混合模型,以便于从Vert.x 3迁移。
Vert.x 5只保留了 Future 模型,因此移除了回调模型。
由于经典的AbstractVerticle
类生命周期API不太适合基于未来的模型,因此提供了一个新的VerticleBase
基类:
public class MyVerticle extends VerticleBase {
private HttpServer server;
@Override
public Future<?> start() {
server = vertx.createHttpServer().requestHandler(req ->
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!"));
// 现在绑定服务器:
return server.listen(8080);
}
}
VerticleBase
和Verticle
都扩展了一个新的Deployable
接口,由于该接口是功能性的,你甚至可以编写一行verticle:
Deployable verticle = context -> vertx
.createHttpServer()
.requestHandler(req -> req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!"))
.listen(8080);
注意:AbstractVerticle
仍然可以使用,并没有被弃用,我们只是推荐使用最适合你需求的基类。
Java模块
Vert.x 5支持Java平台模块系统(JPMS)与显式模块(Vert.x 4只支持自动模块)。
大多数Vert.x组件都支持模块(尽管由于依赖关系,一些组件无法支持),即将发布的模块化Vert.x指南将提供更多信息,同时你可以查看我们的JPMS示例。
gRPC改进
Vert.x gRPC在这个主要版本中有了一些很棒的新增功能,使Vert.x gRPC成为实现gRPC服务的首选。
gRPC Web
Vert.x gRPC服务器默认支持gRPC Web协议(即不需要中间代理)。
在Vert.x方面,启用gRPC Web协议支持只是一个选项开关。 在不久的将来,我们将提供一个教程,解释如何使用protoc
生成浏览器客户端并与服务器通信。
gRPC截止时间
Vert.x gRPC 支持在客户端和服务器上处理超时和截止时间。
这里有一个简单的例子。
JSON 线格式
gRPC隐式假设使用Protobuf线格式,Vert.x gRPC客户端也支持JSON线格式。
这里有一个简单的例子。
OpenAPI & Vert.x OpenAPI路由器
随着Vert.x 5的发布,OpenAPI模块现在还支持二进制数据。
你可以在这里找到Vert.x OpenAPI的简单示例。
你可以在这里找到Vert.x OpenAPI路由器的简单示例。
io_uring支持
Vert.x 4已经在孵化中支持io_uring一段时间了,并且有一个单独的jar。
Netty 4.2将io_uring从孵化中提升出来,因此Vert.x核心支持它开箱即用。
客户端负载均衡
基于HTTP的客户端的客户端负载均衡,有多种策略。
这里有一个简单的HTTP客户端示例 以及一个gRPC HTTP客户端示例。
服务解析器
Vert.x服务解析器是Vert.x堆栈的新成员,旨在为客户端提供动态地址解析,它将Vert.x核心客户端负载均衡扩展到一组新的服务解析器。
启用的客户端,如HTTP/Web/gRPC客户端,可以使用服务解析器动态地将服务地址映射到网络地址列表。
你可以在这里找到一些示例。
HTTP代理
我们的HTTP代理拦截端已经通过开箱即用的转换和WebSocket升级中的拦截器进行了改进。
此外,缓存部分得到了适当的缓存服务提供接口(SPI)以及对缓存规范的扩展支持。
其他改进
Unix域套接字
Unix域套接字历来只由本地传输支持,现在对于JDK 16或更高版本可用。
连接选项
TCP和HTTP客户端具有更细粒度的连接能力,提供每个连接的SSL和代理选项。以前这样的配置只可能在客户端范围内进行。
非池化HTTP连接
与HTTP服务器的默认交互涉及提供请求对象,让Vert.x HTTP客户端建立到实际服务器的连接,然后将其池化以供后续使用。
有时,你可能希望管理这样的连接而不是重用池化的连接,对于这个用例,你现在可以使用Vert.x HTTP客户端的连接能力。
Micrometer指标性能改进
我们集成的Micrometer指标开销已经减少,你可以在这个博客文章中了解更多。
TCP关闭
HTTP服务器和客户端支持优雅关闭。
你可以关闭服务器或客户端。
调用shutdown
会启动关闭阶段,服务器或客户端有机会执行清理操作。
- 独立的HTTP服务器取消绑定
- 共享的HTTP服务器从接受服务器集合中移除
- HTTP客户端拒绝发送任何新请求
当所有连接的飞行请求处理完毕后,服务器或客户端然后被关闭。
应用程序启动器
应用程序启动器是一个新工具,它解决了以far jar打包的Vert.x应用程序的启动问题。它取代了Vert.x 4的io.vertx.core.Launcher
。
即将废弃的特性
一些组件在5.0中正在慢慢被废弃,这意味着它们在5.x系列的生命周期内仍然受到支持,但我们不再鼓励使用它们,因为我们为它们提供了替代品。这些组件计划在下一个主要版本(Vert.x 6)中消失。
以下是我们在5.x中标识为废弃的组件列表
组件 | 替代品 |
---|---|
gRPC Netty | Vert.x gRPC客户端和服务器 |
JDBC API | JDBC的SQL客户端API实现 |
服务发现 | Vert.x服务解析器 |
RxJava 1 | Mutiny或RxJava 3 |
OpenTracing | OpenTelemetry |
Vert.x Unit | Vert.x JUnit 5 |
以下是在5.x中被移除的组件列表,它们在4.x系列中已经废弃。
- Vert.x Sync,被Vert.x虚拟线程替代
- 服务工厂/Maven服务工厂/HTTP服务工厂
接下来是什么?
Vert.x 5计划在12月发布,直到发布之前,你可以期待几个候选版本。
最后
弃用和重大更改可以在wiki上找到。
发布工件已经部署到Maven Central,你可以在Maven Central上获得发行版。
最重要的是,文档已经部署在这个预览网站上 https://vertx.io/docs/5.0.0-SNAPSHOT/