Как настроить клиент rest в кейсе микропрофиля quarkus

Как я могу настроить базовый HttpClient при использовании микропрофиля Quarkus в качестве клиента для отдыха? Например, количество повторных попыток, размер пула соединений на хост и т. Д.? Также можно ли каким-то образом принудительно перезапустить клиента (чтобы пул соединений был перезапущен)?


person Konstantin Kulagin    schedule 08.09.2020    source источник


Ответы (2)


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

RestClientBuilder также имеет методы для установки этих свойств, если вы используете программный API вместо подхода CDI.

Мне не известны какие-либо средства перезапуска базового пула клиентских HTTP-соединений. Каков будет вариант использования в такой ситуации, когда не требуется перезапуск всего приложения?

person Ken    schedule 10.09.2020
comment
Нет, я ищу, чтобы установить соединениеTTL - person Konstantin Kulagin; 11.09.2020

Итак ... После долгих поисков вот решение, которое я нашел до сих пор. Очевидно, это не очевидно:

Чтобы он работал на чистой 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. Сделайте 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. Собственная прибыль

Повеселись

person Konstantin Kulagin    schedule 11.09.2020
comment
ResteasyClientBuilder и любая реализация RestClientListener уже должны быть зарегистрированы для собственного образа и не требуют их собственного resources-config.json. Если это не так, поднимите вопрос github.com/quarkusio/quarkus/issues. - person Ken; 12.09.2020
comment
Кроме того, если вы используете программный API, вам не нужен слушатель, вы можете: RestClientBuilder.property("resteasy.connectionTTL", List.of(2L, TimeUnit.SECONDS)); - person Ken; 12.09.2020
comment
не могли бы вы подробнее рассказать о последнем? - person Konstantin Kulagin; 13.09.2020
comment
Если вы не делаете @Inject @RestClient MyClientInterface, вы можете использовать RestClientBuilder для создания экземпляра и установки свойства непосредственно с помощью построителя. См. скачать .eclipse.org / microprofile / для примера. - person Ken; 14.09.2020
comment
спасибо, Кен. Я пытался найти какую-либо документацию на стороне Quarkus, как вносить изменения в клиент для отдыха, и не смог. Также я не был уверен, насколько глубоко я могу пойти с модификациями микропрофилей, учитывая, что Quarkus сделал некоторые модификации, чтобы заставить его работать, и мои модификации могут действительно что-то сломать. В любом случае, я постараюсь использовать программный подход. Но в целом было бы здорово иметь возможность изменять RestClient таким же образом, как и для ObjectMapper. - person Konstantin Kulagin; 16.09.2020