Vert.x 发布 5.0 首个 RC 版本,正式版计划在 12 月发布

来源: OSCHINA
编辑: 红薯
2024-11-21 02:37:45
AI总结

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);
  }
}

VerticleBaseVerticle都扩展了一个新的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/

展开阅读全文
点击加入讨论🔥(5) 发布并加入讨论🔥
5 评论
1 收藏
分享
AI总结
返回顶部
顶部