问题描述
使用Quarkus微概要文件作为其他客户端时,如何配置底层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 的文件,其中包含您的类名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。前缀
- 利润
现在提供本机支持: 完成上述步骤后:
- 通过创建文件reflect-config.json将MyBuildListener和ResteasyClientBuilder设置为可反射:
[
{
"name": "org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder","allDeclaredConstructors": true,"allPublicConstructors": true,"allDeclaredMethods": true,"allPublicMethods": true,"allDeclaredFields": true,"allPublicFields": true
},{
"name": "my.test.MyBuilderListener","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
- 本国利润
玩得开心