Eclipse Vert.x 是一个微服务开发框架,基于事件和异步,依托于全异步 Java 服务器 Netty,并扩展了很多其他特性,以其轻量、高性能、支持多语言开发而备受开发者青睐。
Eclipse Vert.x 版本 4.5.11 现已发布,此版本修复了 Netty 中的 CVE-2024-47535。一些弃用和破坏性变更如下:
Vert.x Core
ServerWebSocket handshake API deprecation
https://github.com/eclipse-vertx/vert.x/pull/5387
Server WebSocket API 可以隐式控制握手(例如发送消息)或显式控制握手(接受或任何 WebSocket 交互)。Vert.x 5 完全假定已处理的服务器 WebSocket 已接受其握手。
握手操作被移至服务器握手处理程序,以代替隐式/显式服务器 WebSocket controls。
// Before
server
.webSocketHandler(ws -> {
if (shouldAccept(ws)) {
ws.accept();
ws.write(frame);
} else {
ws.reject();
}
});
// After
server
.webSocketHandshakeHandler(handshake -> {
if (shouldAccept(handshake)) {
handshake.accept();
} else {
handshake.reject();
}
}).webSocketHandler(ws -> {
ws.write(frame);
});
Vert.x Codegen
弃用 JsonGen base64 编码基本选项
https://github.com/eclipse-vertx/vertx-codegen/pull/392
源于 Vert.x 3 的 Legacy Buffer base64 encoding stemming 在 Vert.x 4.x 中被弃用。
Vert.x Micrometer Metrics
HTTP PATH metrics don't consistently report a path
https://github.com/vert-x3/vertx-micrometer-metrics/issues/225
HTTP client 和 server metrics tags 中的PATH
标签并未一致地报告路径。有时它会报告完整的 URI(包含 host、port 等),有时它会报告带有查询字符串的路径,有时只报告路径。
现在它将始终如一地只报告路径。虽然从技术上讲这是一个破坏性的更改,但在很多情况下它不会影响用户应用程序,因为此标签默认是禁用的。
如果用户应用程序需要先前的 broken behavior,则可以配置 custom tag provider:
Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new MicrometerMetricsOptions()
.setPrometheusOptions(new VertxPrometheusOptions().setEnabled(true))
.setServerRequestTagsProvider(req -> {
String uri = req.uri();
return Collections.singletonList(Tag.of("path", uri));
})
.setClientRequestTagsProvider(req -> {
String uri = req.uri();
return Collections.singletonList(Tag.of("path", uri));
})
.setEnabled(true)));
更多详情可查看 4.5.11 发行说明以及弃用和破坏性变更。