第 3 章 功能
3.1. 新增和改变的功能 复制链接链接已复制到粘贴板!
本节论述了本发行版本中引入的新功能。它还包含有关现有功能更改的信息。
3.1.1. 4.3 版本中引入的新功能 复制链接链接已复制到粘贴板!
Eclipse Vert.x 4.3 提供以下新功能或更改的功能。
3.1.1.1. Micrometer 将指标类型添加到 JMX 对象名称 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.3.4 开始,因为升级到 Micrometer 1.9.3 时,对象名称现在在使用带 Java 管理扩展(JMX)的 Eclipse Vert.x Micrometer Metrics 时包括指标类型。
这个增强只与 micrometer-registry-jmx 模块的用户相关。
3.1.1.2. 带有 GraphQL Java 19 的 Eclipse Vert.x 默认使用平台区域设置 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.3.3 开始,Eclipse Vert.x 支持版本 19 of GraphQL Java,这是 GraphQL 查询语言的 Java 服务器实现。当使用 GraphQL Java 19 时,如果您未在 JVM 中设置区域设置,则 GraphQL 引擎现在使用 JVM 默认区域设置,这是安装 JVM 的平台的区域设置。另外,您可以将 JVM 默认 Locale 配置为使用不同的值,也可以使用 Eclipse Vert.x Web GraphQL 处理程序来设置自定义区域设置。
Eclipse Vert.x 4.3.3 或更高版本也支持 GraphQL Java 版本 18。
3.1.1.3. 使用 jackson-databind 功能的用户必须将这个依赖项包含在其项目中 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.3.2 onward 中,如果使用 Jackson Databind 库以及 vertx-web-openapi,vertx-auth-webauthn 或 vertx-config-yaml 模块,您必须将以下依赖项添加到项目描述符中:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
由于 Jackson Databind 库已导致一些安全漏洞和其他模块通常只使用 Jackson Databind 来执行某些内部操作,所以使用 Eclipse Vert.x 解析器代替了任何需要使用 vertx-web-openapi、vertx-auth-webauthn 或 vertx-config-yaml 模块及 Jackson Databind。但是,如果您要继续使用 Jackson Databind 中的任何这些模块,则必须在项目中明确包含这个依赖项,如上例中所示。
3.1.1.4. 使用 Eclipse Vert.x OpenAPI 的正文处理器设置的更改 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.3.1 onward 中,Eclipse Vert.x OpenAPI 需要使用 routerBuilder.rootHandler () 方法,以确保在任何 PLATFORM 或 SECURITY_POLICY 处理程序 后 正确设置了正文处理器。
例如:
BodyHandler bodyHandler = BodyHandler.create("my-uploads");
routerBuilder.rootHandler(bodyHandler);
BodyHandler bodyHandler = BodyHandler.create("my-uploads");
routerBuilder.rootHandler(bodyHandler);
在较早版本的 Eclipse Vert.x 中,Eclipse Vert.x OpenAPI 支持 routerBuild.bodyHandler () 方法来添加正文处理程序。但是,bodyHandler () 方法有以下缺点:
- Eclipse Vert.x 没有执行任何验证,以确保设置正确顺序。
- Eclipse Vert.x OpenAPI 存储为特殊处理程序,以确保它始终是路由上的第一个处理器,但并不总是保证。
bodyHandler () 方法在 Eclipse Vert.x 4.3.1 中弃用。前面的 rootHandler 调用现在会取代之前版本中提供的以下 bodyHandler 调用:
BodyHandler bodyHandler = BodyHandler.create("my-uploads");
routerBuilder.bodyHandler(bodyHandler);
BodyHandler bodyHandler = BodyHandler.create("my-uploads");
routerBuilder.bodyHandler(bodyHandler);
从 Eclipse Vert.x 4.3.1 开始,Eclipse Vert.x reactive Oracle 客户端包括以下对 BLOB 和 RAW 数据的改进:
当读取
BLOB或RAW数据时,客户端现在返回一个io.vertx.core.buffer.Buffer值。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意这个更改是作为查询参数修复
RAW值的问题的一部分而造成的一致性。在较早版本的 Eclipse Vert.x 中,BLOB 或RAW数据作为字节阵列返回。在编写或过滤
BLOB数据时,数据现在由新的io.vertx.oracleclient.data.Blob类型表示。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.1.6. 默认禁用自动生成的密钥的检索 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.3.1 onward 中,在 Eclipse Vert.x Oracle reactive 客户端中使用 Eclipse Vert.x 4.3.1,默认禁用了自动生成的密钥的检索。Eclipse Vert.x Oracle reactive 客户端通常不需要检索自动生成的密钥,因为大多数应用程序都不依赖于 ROWID。
此功能增强还促进 INSERT…SELECT 等查询,在启用自动检索后无法成功运行。
3.1.1.8. 为 Micrometer 请求指标重命名 requestsTagsProvider 选项 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.3.0 onward,在 MicrometerMetricsOptions 类中,服务器请求指标的 requestsTagsProvider 选项被重命名为 serverRequestTagsProvider。此功能增强是必要的,因为现在还针对客户端请求指标提供了类似的 clientRequestTagsProvider 选项。
在早期的 Eclipse Vert.x 版本中,requestTagsProvider 选项使用 getter 和 a setter (名为 getRequestsTagsProvider 和 setRequestsTagsProvider )。在 Eclipse Vert.x 4.3.0 及更高版本中,serverRequestTagsProvider 选项的 getter 和 setter 重命名为 getServerRequestTagsProvider,setServerRequestTagsProvider。
在 Eclipse Vert.x 4.3.0 onward 中,当 OAuth2 授权配置为 on-behalf-of (OBO)模式时,OAuth2 要求明确指定 OAuth2Credentials 对象来授权请求。
例如:
oauth2.authenticate(
new Oauth2Credentials().setAssertion("head.body.signature").addScope("a").addScope("b"))
oauth2.authenticate(
new Oauth2Credentials().setAssertion("head.body.signature").addScope("a").addScope("b"))
在较早版本的 Eclipse Vert.x 中,OBO 模式中的 OAuth2 授权允许使用 TokenCredentials。但是,因为网络流是可选的,以允许重复使用同一 OAuth2Credentials 对象,前面的 Oauth2Credentials 调用现在会取代之前版本中可用的以下 TokenCredentials 调用:
oauth2.authenticate(
new TokenCredentials("head.body.signature").addScope("a").addScope("b"));
oauth2.authenticate(
new TokenCredentials("head.body.signature").addScope("a").addScope("b"));
3.1.1.10. RoutingContext.fileUploads () 方法返回一个列表 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.3.0 onward 中,RoutingContext.fileUploads () 方法返回一个 List<FileUpload> 值。在列表中存储文件上传有助于保留上传顺序。
例如:
List<FileUpload> uploads = ctx.fileUploads();
List<FileUpload> uploads = ctx.fileUploads();
在较早版本的 Eclipse Vert.x 中,RoutingContext.fileUploads () 方法返回 Set<FileUpload> 值。但是,在集合中存储文件上传与表单内容类型的 World Wide Web Consortium (W3C)规格不一致,因为它没有保留正确的顺序,用户无法依赖上传名称作为唯一键。现在,前面的示例替换了之前版本中提供的以下方法声明:
Set<FileUpload> uploads = ctx.fileUploads();
Set<FileUpload> uploads = ctx.fileUploads();
3.1.1.11. 实施子路由器的单方法 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.3.0 onward,Route.subRouter (Router) 方法是实施子路由器唯一支持的方法。
早期版本的 Eclipse Vert.x 支持两种不同的方法来实现子路由器:
-
Route.subRouter(Router) -
router.mountSubRouter (String, Router)
但是,这两种方法之间的行为不一致,因为 Router.mountSubRouter 方法允许任何路径,而 Route.subRouter 方法明确需要一个通配符星号(*)来代表子路由路径。Router.mountSubRouter 方法也通过附加缺少的通配符来委派给 Route.subRouter 方法。
在 Eclipse Vert.x 4.3.0 及更高版本中,Router.mountSubRouter 方法已弃用。路由器对象现在还必须使用 Route.subRouter 方法来实施子路由器。例如:
router.route("/eventbus/*").subRouter(otherRouter);
router.route("/eventbus/*").subRouter(otherRouter);
前面的 router.route ().subRouter () 调用现在取代之前版本中可用的以下类型的 router.mountSubRouter () 调用:
router.mountSubRouter("/eventbus", otherRouter);
router.mountSubRouter("/eventbus", otherRouter);
在以前的版本中,路由器对象也可以使用 router.route ().subRouter () 调用作为使用 router.mountSubRouter () 的替代选择。
3.1.1.12. 在多个处理程序调用之间解析请求正文的缓存 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.3.0 onward,在正文处理程序解析 web 请求的正文后,正文处理程序会将正文缓冲区提供给请求的路由上下文。 在路由上下文中缓存正文缓冲区意味着需要请求正文正文的多个不同处理程序可以获取缓存的结果,而无需再次解析正文。 此增强还支持正文内容为 application/json 类型的情况。
RoutingContext 类提供了一个新的 body () 方法,用于将请求正文作为指定类型获取。
例如:
新的 body () getter 还提供以下额外功能:
此功能增强提供以下优点:
-
body ()getter 不会为空,这有助于避免任何需要执行 null 检查。 - 请求正文只需要解析一次,除非基本缓冲区变化。对基本缓冲区的任何更改都会触发另一个解析,缓存的值会在此时被覆盖。
在早期的 Eclipse Vert.x 版本中,RoutingContext 类提供了以下使用 body () 方法被弃用的方法:
3.1.1.13. EventBus 通知默认值的变化 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.3.0 onward 中,为了避免不必要的流量,Eclipse Vert.x 断路器状态会禁用有关 Eclipse Vert.x 断路器状态的通知。要启用这些通知,请使用没有 null 的参数调用 CircuitBreakerOptions 对象的 setNotificationAddress 方法。
例如:
CircuitBreakerOptions options = new CircuitBreakerOptions()
.setNotificationAddress(CircuitBreakerOptions.DEFAULT_NOTIFICATION_ADDRESS);
CircuitBreakerOptions options = new CircuitBreakerOptions()
.setNotificationAddress(CircuitBreakerOptions.DEFAULT_NOTIFICATION_ADDRESS);
当您按照上例中所示启用通知时,默认行为是仅将通知发送到本地使用者。要在集群范围内发送通知,请使用参数 false 调用 setNotificationLocalOnly 方法。
例如:
CircuitBreakerOptions options = new CircuitBreakerOptions()
.setNotificationAddress(CircuitBreakerOptions.DEFAULT_NOTIFICATION_ADDRESS)
.setNotificationLocalOnly(false);
CircuitBreakerOptions options = new CircuitBreakerOptions()
.setNotificationAddress(CircuitBreakerOptions.DEFAULT_NOTIFICATION_ADDRESS)
.setNotificationLocalOnly(false);
3.1.1.14. MySQL 客户端批处理执行的变化 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.3.0 onward 中,Eclipse Vert.x reactive SQL 客户端支持管道查询,并在 pipelining 模式中运行批处理查询。pipelining 表示请求会在同一连接上发送,而不等待对之前的请求的响应。
在较早版本的 Eclipse Vert.x 中,由于 MySQL 不支持批处理,因此 SQL 客户端通过按顺序运行准备的查询来运行批量查询,因此用户可以直接通过 API 调用操作。
3.1.1.15. 用于提示和提示字符串的 MongoDB 增强 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.3.0 onward 中,Eclipse Vert.x 包括以下用于提示和提示字符串的 MongoDB 增强:
-
FindOptions对象现在支持类型为JSONObject的 hints。这会取代之前版本中的行为,其中FindOptions对象支持提示类型String。 -
BulkOperations和UpdateOptions对象现在支持类型为JSONObject的提示。BulkOperations和UpdateOptions类各自提供getHint ()和setHint ()方法。 -
BulkOperations、UpdateOptions和FindOptions对象现在也支持类型为String的提示字符串。BulkOperations、UpdateOptions和FindOptions类各自提供getHintString ()和setHintString ()方法。
3.1.1.16. 构建模式的更改 复制链接链接已复制到粘贴板!
在构建 schema 时,从 Eclipse Vert.x 4.3.0 onward 中,使用 Eclipse Vert.x JSON 模式提供的 JSON 表示。JSON 表示允许使用任何验证器。
例如:
JsonSchema schema = JsonSchema.of(dsl.toJson());
JsonSchema schema = JsonSchema.of(dsl.toJson());
在早期的 Eclipse Vert.x 版本中,SchemaBuilder 类提供了 build () 方法,它使用特定验证器实施。build () 方法在 Eclipse Vert.x 4.3.0 中弃用。前面的 JsonSchema 示例现在取代之前版本中提供的以下 build () 方法调用:
Schema schema = dsl.build(parser);
Schema schema = dsl.build(parser);
3.1.2. 之前 4.x 版本中引入的新功能 复制链接链接已复制到粘贴板!
在之前的 4.x 版本中引入了以下新功能。
3.1.2.1. Java 17 支持 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.2.7 onward 中,Eclipse Vert.x 已通过 Red Hat OpenJDK 17 认证。
3.1.2.2. RequestOptions中的 HTTP 标头验证 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.2.4 onward 中,RequestOptions 方法验证 HTTP 标头,如果标头名称无效,请求会失败。
在较早版本的 Eclipse Vert.x 中,HTTPClientRequest 验证 HTTP 标头,因为 RequestOptions 方法使用了没有验证标头名称的 Multimap 实施。
3.1.2.3. 使用 simple 作为本地化的默认区域设置 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.2.4 onward 中,简单 区域被用作 MongoDB 冲突的默认区域设置。
Eclipse Vert.x 4.2.3 引入了对 collation 选项的支持,用于支持比较字符串的特定语言规则。在 Eclipse Vert.x 4.2.3 中,平台 default 被用作默认的区域设置。但是,因为平台默认设置不是恒定值,因此当使用 MongoDB 不支持的区域的系统中,可能会导致失败。例如,Locale.FR 可以成功运行,但不支持 Locale.FR_FR
3.1.2.4. StaticHandler 文件系统配置更改 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.2.4 onward 中,webroot 目录和文件系统访问权限的 StaticHandler 配置属性在 StaticHandler 工厂构造器调用中定义。
例如,以下构造器调用定义了一个 webroot 目录、静态/资源 以及相对文件系统访问:
StaticHandler.create(FileSystemAccess.RELATIVE, "static/resources");
StaticHandler.create(FileSystemAccess.RELATIVE, "static/resources");
例如,以下构造器调用定义了一个 webroot 目录、/home/paulo/Public、root 文件系统访问:
StaticHandler.create(FileSystemAccess.ROOT, "/home/paulo/Public");
StaticHandler.create(FileSystemAccess.ROOT, "/home/paulo/Public");
在较早版本的 Eclipse Vert.x 中,允许使用 setters 定义 allowRootFileSystemAccess 和 webroot 属性。但是,这些值不是最终的,这可能会导致无效的静态配置。在 Eclipse Vert.x 4.2.4 中,上述构造器调用现在取代以下 setter 声明:
StaticHandler.create()
.setAllowRootFileSystemAccess(true)
.setWebRoot("/home/paulo/Public");
StaticHandler.create()
.setAllowRootFileSystemAccess(true)
.setWebRoot("/home/paulo/Public");
StaticHandler.create () 方法仍然使用默认值 RELATIVE 和 webroot,如之前版本中一样。
3.1.2.5. verticle 中的随机服务器端口共享 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.2.0 开始,与负端口号绑定的两个不同的 HTTP 服务器(如 -1) 在特定验证部署的实例中共享相同的随机端口。这意味着多个带有端口 -1 的 HTTP 服务器将共享相同的随机端口。同样,使用端口 -2 绑定的多个 HTTP 服务器将共享相同的随机端口,以此类推。此端口共享基于负端口号的行为独立于白色,因为它允许不同的 HTTP 服务器具有不同的随机端口。
在较早版本的 Eclipse Vert.x 中,随机服务器端口共享基于两个 HTTP 服务器,与端口 0 绑定。但是,这可以防止同一聚合将两个带有不同随机端口的 HTTP 服务器绑定在同一顶端的实例中。
3.1.2.6. HTTP 服务器 cookie 更改 复制链接链接已复制到粘贴板!
Eclipse Vert.x 4.2.0 包含一个新方法 Set<Cookie> cookies (),它允许获取所有 Cookie。
在较早版本的 Vert.x 中,H ttpServerRequest 和 HttpServerResponse 接口使用在 Eclipse Vert.x 4.2.0 中弃用的以下方法:
Map<String, Cookie> cookieMap()
Map<String, Cookie> cookieMap()
RFC 6265 - HTTP State Management Mechanism 规格指出每个 Cookie 都是根据 tuple < name, domain, path > 的唯一标识。但是,在以前的 Eclipse Vert.x 版本中使用 Map<String, Cookie> cookieMap () 方法错误地假定 cookies 只能根据其名称来标识。这意味着,当多个 Cookie 共享同一名称时,要解析最后一个 Cookie 的映射都会被静默覆盖。
3.1.2.7. 使用 GraphQLContext 对象进行上下文管理 复制链接链接已复制到粘贴板!
Eclipse Vert.x 4.2.0 支持 GraphQL Java 版本 17,这是 GraphQL 查询语言的 Java 服务器实施。使用 GraphQL Java 17 时,GraphQLContext 对象现在是在 GraphQL Java 应用程序组件间共享上下文数据的标准。
Eclipse Vert.x 4.2.0 引入了以下新机制来配置 GraphQL 执行:
GraphQLHandler handler = GraphQLHandler.create(graphQL).beforeExecute(builderWithContext -> {
DataLoader<String, Link> linkDataLoader = DataLoaderFactory.newDataLoader(linksBatchLoader);
DataLoaderRegistry dataLoaderRegistry = new DataLoaderRegistry().register("link", linkDataLoader);
builderWithContext.builder().dataLoaderRegistry(dataLoaderRegistry);
});
GraphQLHandler handler = GraphQLHandler.create(graphQL).beforeExecute(builderWithContext -> {
DataLoader<String, Link> linkDataLoader = DataLoaderFactory.newDataLoader(linksBatchLoader);
DataLoaderRegistry dataLoaderRegistry = new DataLoaderRegistry().register("link", linkDataLoader);
builderWithContext.builder().dataLoaderRegistry(dataLoaderRegistry);
});
在早期的 Eclipse Vert.x 版本中,以下 hook 用于 Vert.x Web GraphQL 处理程序来配置数据加载程序。以下 hook 现在在 Eclipse Vert.x 4.2.0 中弃用。
GraphQLHandler handler = GraphQLHandler.create(graphQL).dataLoaderRegistry(rc -> {
DataLoader<String, Link> linkDataLoader = DataLoader.newDataLoader(linksBatchLoader);
return new DataLoaderRegistry().register("link", linkDataLoader);
});
GraphQLHandler handler = GraphQLHandler.create(graphQL).dataLoaderRegistry(rc -> {
DataLoader<String, Link> linkDataLoader = DataLoader.newDataLoader(linksBatchLoader);
return new DataLoaderRegistry().register("link", linkDataLoader);
});
3.1.2.8. OpenJDK11 OpenShift 镜像支持多个构架 复制链接链接已复制到粘贴板!
用于 IBM Z 和 IBM Power 系统的 OpenJ9 镜像已弃用。以下 OpenJDK11 镜像已更新,以支持多个架构:
-
ubi8/openjdk-11
您可以将 OpenJDK11 镜像用于以下架构:
- x86 (x86_64)
- s390x (IBM Z)
- ppc64le (IBM Power Systems)
Red Hat build of Eclipse Vert.x 在启用了 FIPS 的 RHEL 系统上运行,并使用 RHEL 提供的 FIPS 认证库。
3.1.2.10. HTTP 客户端重定向处理程序传播标头 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.1.0 onward 中,如果 HTTP 重定向中存在标头,则 HTTP 客户端重定向处理程序会将标头传播到下一个请求。这个更改可让重定向处理程序对整个重定向请求具有更多的控制。
在早期的 Eclipse Vert.x 版本中,使用标头重定向请求,HTTP 客户端会在重定向后处理标头。
以下示例演示了如何在 Eclipse Vert.x 4.1.0 中处理重定向:
3.1.2.11. 升级到 Infinispan 12 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.1.0 中,Infinispan 集群管理器已更新,并基于 Infinispan 12。
Infinispan 11 存在一个程序漏洞,它允许在多映射缓存中存储字节阵列。作为临时解决方案,Eclipse Vert.x 集群管理器必须使用内部 Infinispan 类 WrappedBytes 来存储事件总线订阅数据。这个问题已在 Infinispan 12 中解决。
3.1.2.12. JSON 配置优先于 MongoDB 客户端中的连接字符串选项 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.1.0 中,即使有 connection_string 选项,也会应用 JSON 配置选项。
现在应用以下配置选项:
在较早版本的 Eclipse Vert.x 中,连接字符串可用时会忽略 JSON 配置选项。例如,考虑前面的示例:在较早版本的 Eclipse Vert.x、db_name、maxPoolSize 和 minPoolSize 选项将被忽略。
3.1.2.13. 删除了已弃用的 JWT 选项方法 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.0 上,使用 JWT 和 OAuth2 处理程序来处理范围。
从 Eclipse Vert.x 4.1.0 onward, JWTOptions.setScopes (List<String>), JWTOptions.addScope (String) 和 JWTOptions.withScopeDelimiter (String) 方法已被删除。这些方法不符合规格。
以下示例演示了如何处理 Eclipse Vert.x 4.1.0 中的范围。
3.1.2.14. 弃用了接受函数的自定义格式器方法 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.1.0,LoggerHandler.customFormatter (Function) 方法已弃用。此函数取为 HttpServerRequest 的输入并返回格式化的日志字符串。由于输出是一个字符串,因此无法访问上下文。
使用新方法 Logger Handler customFormatter (LoggerFormatter) 替代。该方法取为自定义格式,提供对上下文的访问权限。
3.1.2.15. 处理 HTTP 失败的新例外 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.1.0,提供了一个新的异常类 io.vertx.ext.web.handler.HttpException,可用于处理 HTTP 故障。您可以使用例外指定 500 以外的自定义状态代码。例如,新的 HttpException (401, "Forbidden") 表示禁止的请求应返回 status code 401。
3.1.2.16. 支持 RxJava 3 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.1.0 中,支持 RxJava 3。
-
一个新的 rxified API 位于
io.vertx.rxjava3软件包中。 -
与 Eclipse Vert.x JUnit5 集成由
vertx-junit5-rx-java3绑定提供。
3.1.2.17. 上下文服务器拦截器绑定所有类型的数据,并更安全 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4.0.3,ContextServerInterceptor.bind () 方法会将所有类型的数据绑定到上下文。现在,该方法更为安全,因为它不会公开存储详情。
在 Eclipse Vert.x 4.0.3 之前的发行版本中,仅用于将 'String' 数据类型绑定到上下文的方法。它还公开了存储详情。
要使用更新的 ContextServerInterceptor.bind () 方法,您必须更新您的应用程序。
以下示例显示了 Eclipse Vert.x 4.0.3 之前的发行版本中的代码。
// Example code from previous releases
class X extends ContextServerInterceptor {
@Override
public void bind(Metadata metadata, ConcurrentMap<String, String> context) {
// Example code from previous releases
class X extends ContextServerInterceptor {
@Override
public void bind(Metadata metadata, ConcurrentMap<String, String> context) {
以下示例显示了替换代码 fpr Eclipse Vert.x 4.0.3 发行版本。
// Replacing code for Eclipse Vert.x 4.0.3 release
class X extends ContextServerInterceptor {
@Override
public void bind(Metadata metadata) {
// Replacing code for Eclipse Vert.x 4.0.3 release
class X extends ContextServerInterceptor {
@Override
public void bind(Metadata metadata) {
3.1.2.18. 不再需要匹配以通配符结尾的路由路径(/) 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.0.3 之前的发行版本中,如果路由以斜杠结尾,则路由仅包括结束斜杠 / 时,才会调用路由。当通配符为空时,这个规则会导致问题。
从 Eclipse Vert.x 4.0.3 onward 中,这个规则不再应用。您可以创建路径以斜杠(/)结尾的路由。但是,不需要指定请求 URL 中的斜杠。
另外,您可以创建并使用请求 URL 调用以通配符以其路径而不是斜杠(/)结尾的路由。例如,带有通配符的路由可以定义为 /foo/*。此处,该路由必须与路径末尾的打开通配符匹配。请求 URL 可以是 /foo。
在发送请求 URL /foo/* 时,表显示了 Eclipse Vert.x 4.0.3 和之前的版本中的行为。您可以看到,结尾斜杠在 Eclipse Vert.x 4.0.3 中是可选的,并且请求与路由匹配。
| Route(路由) | Eclipse Vert.x 4.0.3 | Eclipse Vert.x 4.0.3 之前的发行版本 |
|---|---|---|
|
| 匹配 | 没有 Match |
|
| 没有 Match | 没有 Match |
|
| 匹配 | 匹配 |
|
| 匹配 | 匹配 |
3.1.2.19. 从服务发现选项中删除 autoRegistrationOfImporters 属性 复制链接链接已复制到粘贴板!
autoRegistrationOfImporters 属性已从服务发现选项中删除。
3.1.2.20. 验证供应商类中的验证方法已更新,以支持 令牌 作为输入凭证 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4.0.3 之前的发行版本中,AuthenticationProvider.authenticate ()方法错误地采用 jwt: someValue 作为输入凭证。
从 Eclipse Vert.x 4.0.3,AuthenticationProvider.authenticate ()方法已更新,并取 token: someValue 作为输入凭证。此更改可确保 JSON 和键入的 API 都一致,并可互换使用。
以下代码显示了在 Eclipse Vert.x 4.0.3 之前对版本验证方法的实现。
new JsonObject().put("jwt", "token...");
new JsonObject().put("jwt", "token...");
以下代码显示了 Eclipse Vert.x 4.0.3 发行版本中对验证方法的实现。
new JsonObject().put("token", "token...");
new JsonObject().put("token", "token...");
3.1.2.21. 获取 PEM 密钥的方法返回 缓冲 程序,而不是 String 复制链接链接已复制到粘贴板!
PubSecKeyOptions.getBuffer () 方法返回 PEM 或 secret 密钥缓冲。在 Eclipse Vert.x 4.0.2 之前的发行版本中,密钥缓冲区被存储并返回为 String。但是,建议将 secret 保存为 缓冲区。在 Eclipse Vert.x 4.0.2 onward 中,方法存储并将密钥缓冲区返回为 缓冲。这个更改可提高 secret 的安全性和处理。
PubSecKeyOptions.setBuffer () 方法继续接受 String 参数。在 set 方法中,添加了对缓冲的超载,以安全地处理非 ASCII 机密资料。这个更改不需要对现有代码进行任何更改。
3.1.2.22. Kubernetes 服务导入程序不再自动注册 复制链接链接已复制到粘贴板!
从 Eclipse Vert.x 4 中,KubernetesServiceImporter 发现网桥不再会自动注册。即使您已在 Maven 项目的类路径中添加了网桥,它也不会自动注册。
在创建 ServiceDiscovery 实例后,您必须手动注册该网桥。
3.1.2.23. 对异步操作使用将来的方法 复制链接链接已复制到粘贴板!
Eclipse Vert.x 4 使用将来的异步操作。每个回调方法都有对应的未来方法。
将来可用于编写异步操作。当您使用将来时,错误处理会更好。因此,建议将回调和将来在您的应用程序中结合使用。
3.1.2.24. 不依赖于 Jackson Databind 库 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4 中,Jackson Databind 是一个可选 Maven 依赖项。如果要使用这个依赖项,您必须在 classpath 中明确添加它。例如,如果您要对象映射 JSON,则必须明确添加依赖项。
3.1.2.25. 处理弃用和删除 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4 中,提供了新的增强功能。在 Eclipse Vert.x 4 中弃用或删除旧的功能。在将应用程序迁移到 Eclipse Vert.x 4 之前,请检查 弃用和删除。
使用已弃用的 API 时,Java 编译器会生成警告。在将应用迁移到 Eclipse Vert.x 4 时,您可以使用编译器检查已弃用的方法。
3.1.2.26. 支持分布式追踪 复制链接链接已复制到粘贴板!
Eclipse Vert.x 4 支持分布式追踪。您可以使用追踪来监控微服务并识别性能问题。
Eclipse Vert.x 4 与 OpenTracing 系统集成。
以下 Eclipse Vert.x 组件可以记录追踪:
- HTTP 服务器和 HTTP 客户端
- Eclipse Vert.x SQL 客户端
- Eclipse Vert.x Kafka 客户端
跟踪作为技术预览提供。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。
3.1.2.27. EventBus JavaScript Client 的新发布位置 复制链接链接已复制到粘贴板!
在 Eclipse Vert.x 4 中,EventBus JavaScript 客户端 vertx-web-client.js 没有在 Maven 存储库中作为红帽工件发布。
客户端在 npm 存储库中发布。您可以从以下位置访问客户端 :@vertx/eventbus-bridge-client.js
3.1.2.28. 使用 OpenShift Maven 插件部署 Eclipse Vert.x 应用 复制链接链接已复制到粘贴板!
使用 OpenShift Maven 插件在 OpenShift 上部署 Eclipse Vert.x 应用。Fabric8 Maven 插件不再被支持。如需更多信息,请参阅从 Fabric8 Maven 插件迁移到 Eclipse JKube 的部分。
3.1.2.29. 用于 OpenShift 的 Eclipse Vert.x metering 标签 复制链接链接已复制到粘贴板!
您可以在 Eclipse Vert.x pod 中添加 metering 标签,并使用 OpenShift Metering Operator 检查红帽订阅详情。
- 不要将 metering 标签添加到 Operator 或模板部署和管理的任何 pod 中。
- 您可以使用 OpenShift Container Platform 版本 4.8 及更早版本上的 Metering Operator 将标签应用到 pod。从 4.9 版本中,在没有直接替换的情况下,Metering Operator 不再可用。
Eclipse Vert.x 应使用以下 metering 标签:
-
com.company: Red_Hat -
rht.prod_name: Red_Hat_Runtimes -
rht.prod_ver: 2023-Q1 -
rht.comp: Vert.x -
rht.comp_ver: 4.3.7 -
rht.subcomp: <leave_blank> -
rht.subcomp_t: application
3.1.2.30. 支持 OpenJDK 8 和 OpenJDK 11 RHEL 8 通用基础镜像(UBI8) 复制链接链接已复制到粘贴板!
Eclipse Vert.x 引进了对使用 Red Hat OpenJDK 8 和 Red Hat OpenJDK 11 的 OCI 兼容 通用基础镜像 在 OpenShift 中构建和部署 Eclipse Vert.x 应用程序的支持。https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/
RHEL 8 OpenJDK 通用基础镜像替换 RHEL 8 OpenJDK 构建器镜像。RHEL 8 OpenJDK 基础镜像不再支持与 Eclipse Vert.x 搭配使用。