Как я могу настроить базовый HttpClient при использовании микропрофиля Quarkus в качестве клиента для отдыха? Например, количество повторных попыток, размер пула соединений на хост и т. Д.? Также можно ли каким-то образом принудительно перезапустить клиента (чтобы пул соединений был перезапущен)?
Как настроить клиент rest в кейсе микропрофиля quarkus
Ответы (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-соединений. Каков будет вариант использования в такой ситуации, когда не требуется перезапуск всего приложения?
Итак ... После долгих поисков вот решение, которое я нашел до сих пор. Очевидно, это не очевидно:
Чтобы он работал на чистой 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. к имени свойства
- Выгода
Теперь встроенная поддержка: после шагов, описанных выше:
- Сделайте 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
- Собственная прибыль
Повеселись
ResteasyClientBuilder
и любая реализация RestClientListener
уже должны быть зарегистрированы для собственного образа и не требуют их собственного resources-config.json
. Если это не так, поднимите вопрос github.com/quarkusio/quarkus/issues.
- person Ken; 12.09.2020
RestClientBuilder.property("resteasy.connectionTTL", List.of(2L, TimeUnit.SECONDS));
- person Ken; 12.09.2020
@Inject @RestClient MyClientInterface
, вы можете использовать RestClientBuilder
для создания экземпляра и установки свойства непосредственно с помощью построителя. См. скачать .eclipse.org / microprofile / для примера.
- person Ken; 14.09.2020