如何在quarkus microprofile案例中配置rest client
How to configure rest client in quarkus microprofile case
当使用 Quarkus microprofile 作为 rest 客户端时,如何配置底层 HttpClient?
比如重试次数、每台主机的连接池大小等等?
也可以强制客户端以某种方式重新启动(因此连接池将重新启动)?
https://download.eclipse.org/microprofile/microprofile-rest-client-2.0-RC2/microprofile-rest-client-2.0-RC2.html#_configuration_keys 概述了可以使用的全套配置密钥。
您要找的是:
{packageName}.{interfaceName}/mp-rest/connectTimeout
{packageName}.{interfaceName}/mp-rest/readTimeout
如果您使用编程 API 而不是 CDI 方法,RestClientBuilder
也有设置这些属性的方法。
我不知道有什么方法可以重新启动底层 HTTP 客户端连接池。对于这种不需要重新启动整个应用程序的情况,用例是什么?
所以...经过大量挖掘,这是我目前找到的解决方案。显然不是很明显:
使其在纯 Java(非本机)中工作
在 resources/META-INF/services 目录下添加名为 org.eclipse.microprofile.rest.client.spi.RestClientBuilderListener 的文件,其中包含 class RestClientBuilderListener 接口实现的名称。例如 my.test.MyBuilderListener。这将允许 ServiceLocator 执行您的侦听器
引用一个属性你想从ResteasyClientBuilder修改,例如设置你的自定义值到connectionTTL代码将如下所示:
public void onNewBuilder(RestClientBuilder builder) {
log.info("Changing TTL for connections");
builder.property("resteasy.connectionTTL", List.of(2L, TimeUnit.SECONDS));
}
即。添加 resteasy. 前缀到 属性 名称
- 利润
现在原生支持:
经过以上步骤:
- 通过创建文件设置 MyBuildListener 和 ResteasyClientBuilder 可用于反射 reflection-config.json:
[
{
"name": "org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder",
"allDeclaredConstructors": true,
"allPublicConstructors": true,
"allDeclaredMethods": true,
"allPublicMethods": true,
"allDeclaredFields": true,
"allPublicFields": true
}, {
"name": "my.test.MyBuilderListener",
"allDeclaredConstructors": true,
"allPublicConstructors": true,
"allDeclaredMethods": true,
"allPublicMethods": true,
"allDeclaredFields": true,
"allPublicFields": true
}
]
- 将服务注册文件添加到资源中。创建一个名为 resources-config.json 的文件,内容为
{
"resources": [
{
"pattern": "META-INF/services/org\.eclipse\.microprofile\.rest\.client\.spi\.RestClientBuilderListener$"
}
]
}
- 在 application.yaml 中注册两个文件:
quarkus:
native:
additional-build-args: -H:ResourceConfigurationFiles=resources-config.json, -H:ReflectionConfigurationFiles=reflection-config.json
- 本机利润
玩得开心
当使用 Quarkus microprofile 作为 rest 客户端时,如何配置底层 HttpClient? 比如重试次数、每台主机的连接池大小等等? 也可以强制客户端以某种方式重新启动(因此连接池将重新启动)?
https://download.eclipse.org/microprofile/microprofile-rest-client-2.0-RC2/microprofile-rest-client-2.0-RC2.html#_configuration_keys 概述了可以使用的全套配置密钥。
您要找的是:
{packageName}.{interfaceName}/mp-rest/connectTimeout
{packageName}.{interfaceName}/mp-rest/readTimeout
如果您使用编程 API 而不是 CDI 方法,RestClientBuilder
也有设置这些属性的方法。
我不知道有什么方法可以重新启动底层 HTTP 客户端连接池。对于这种不需要重新启动整个应用程序的情况,用例是什么?
所以...经过大量挖掘,这是我目前找到的解决方案。显然不是很明显:
使其在纯 Java(非本机)中工作
在 resources/META-INF/services 目录下添加名为 org.eclipse.microprofile.rest.client.spi.RestClientBuilderListener 的文件,其中包含 class RestClientBuilderListener 接口实现的名称。例如 my.test.MyBuilderListener。这将允许 ServiceLocator 执行您的侦听器
引用一个属性你想从ResteasyClientBuilder修改,例如设置你的自定义值到connectionTTL代码将如下所示:
public void onNewBuilder(RestClientBuilder builder) { log.info("Changing TTL for connections"); builder.property("resteasy.connectionTTL", List.of(2L, TimeUnit.SECONDS)); }
即。添加 resteasy. 前缀到 属性 名称
- 利润
现在原生支持: 经过以上步骤:
- 通过创建文件设置 MyBuildListener 和 ResteasyClientBuilder 可用于反射 reflection-config.json:
[
{
"name": "org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder",
"allDeclaredConstructors": true,
"allPublicConstructors": true,
"allDeclaredMethods": true,
"allPublicMethods": true,
"allDeclaredFields": true,
"allPublicFields": true
}, {
"name": "my.test.MyBuilderListener",
"allDeclaredConstructors": true,
"allPublicConstructors": true,
"allDeclaredMethods": true,
"allPublicMethods": true,
"allDeclaredFields": true,
"allPublicFields": true
}
]
- 将服务注册文件添加到资源中。创建一个名为 resources-config.json 的文件,内容为
{
"resources": [
{
"pattern": "META-INF/services/org\.eclipse\.microprofile\.rest\.client\.spi\.RestClientBuilderListener$"
}
]
}
- 在 application.yaml 中注册两个文件:
quarkus:
native:
additional-build-args: -H:ResourceConfigurationFiles=resources-config.json, -H:ReflectionConfigurationFiles=reflection-config.json
- 本机利润
玩得开心