如何在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(非本机)中工作

  1. resources/META-INF/services 目录下添加名为 org.eclipse.microprofile.rest.client.spi.RestClientBuilderListener 的文件,其中包含 class RestClientBuilderListener 接口实现的名称。例如 my.test.MyBuilderListener。这将允许 ServiceLocator 执行您的侦听器

  2. 引用一个属性你想从ResteasyClientBuilder修改,例如设置你的自定义值到connectionTTL代码将如下所示:

    public void onNewBuilder(RestClientBuilder builder) {
       log.info("Changing TTL for connections");
       builder.property("resteasy.connectionTTL", List.of(2L, TimeUnit.SECONDS));
    }
    

即。添加 resteasy. 前缀到 属性 名称

  1. 利润

现在原生支持: 经过以上步骤:

  1. 通过创建文件设置 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
       }
     ]
  1. 将服务注册文件添加到资源中。创建一个名为 resources-config.json 的文件,内容为
{
  "resources": [
    {
      "pattern": "META-INF/services/org\.eclipse\.microprofile\.rest\.client\.spi\.RestClientBuilderListener$"
    }
  ]
}
  1. 在 application.yaml 中注册两个文件:
quarkus:
  native:
    additional-build-args: -H:ResourceConfigurationFiles=resources-config.json, -H:ReflectionConfigurationFiles=reflection-config.json
  1. 本机利润

玩得开心