如何在quarkus microprofile案例中配置Rest Client

问题描述

使用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中运行(无本机)

  1. resources / META-INF / services 目录下,添加名为 org.eclipse.microprofile.rest.client.spi.RestClientBuilderListener 的文件,其中包含您的类名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. 通过创建文件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
       }
     ]
  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. 本国利润

玩得开心