Как внедрить собственный Http-клиент в Spring Cloud openfeign? ⇐ JAVA
Как внедрить собственный Http-клиент в Spring Cloud openfeign?
Я пытаюсь предоставить CloseableHttpClient для Spring Cloud OpenFeign. В документации Spring Cloud Open Feign говорится, что он поддерживает CloeableHttpClient. В документации Spring не приводится ни одного примера фактической замены HTTP-клиента.
По сути, я предоставляю SSLContext HTTP-клиенту и хочу, чтобы Feign использовал этот загруженный SSLContext клиент. Как внедрить этот CloseableHttpClient в Feign?
Ниже приведена моя соответствующая конфигурация:
[*]Я использую SpringBootApp
@SpringBootApplication @EnableFeignClients Приложение публичного класса расширяет SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); } [*]Интерфейс клиента Feign выглядит следующим образом: import org.springframework.cloud.openfeign.FeignClient; // пропускаем остальную часть импорта для краткости @FeignClient(name ="remote-service", url = "${remote.service-url}", конфигурация = FeignConfig.class) общедоступный интерфейс RemoteServiceApi { @GetMapping(value = "/api/v1/resources/{Id}") public String getResource(@PathVariable("Id") String Id); } [*]Класс FeignConfig import org.apache.http.impl.client.CloseableHttpClient; // пропускаем остальную часть импорта для краткости общественный класс FeignConfig { @Бин общественный клиент CloseableHttpClient() { CloseableHttpClient httpClient=null; пытаться { //... Пропускаем код для краткости. // здесь создается «sslSocketFactory», используемый в построителе HttpClient ниже httpClient = HttpClients.custom().setSSLSocketFactory(sslSocketFactory) .setMaxConnTotal(10) .setMaxConnPerRoute(10) .строить(); }catch(IOException | KeyManagementException | UnrecoverableKeyException | NoSuchAlgorithmException | KeyStoreException | CertificateException e) { System.err.println("Исключение при создании HttpClient. : "+e.getMessage()); } вернуть httpClient; } } [*]В файле application.properties feign.httpclient.enabled установлено значение true [*]Версия Springboot — 2.4.4. Версия Feign — feign-core-10.10.1 Другая часть, которую я не понял, это то, как Spring собирался подключить этот пользовательский CloseableHttpClient к Feign, как он утверждает. Потому что во время отладки во время выполнения я вижу, что аннотированный интерфейс Feign реализован классом feign.SynchronousMethodHandler, а поле client в этом классе имеет тип feign.Client, а во время выполнения оно получает com.sun.security.ntlm.Client ( может быть реализацией по умолчанию). Как CloseableHttpClient должен быть внедрен в feign.Client? В Интернете очень мало примеров подобных вещей, и они не объясняют их.
Я нашел этот пост на SOF, но
[*]здесь также внедряется @Bean типа CloseableHttpClient [*]На этот вопрос нет полезного ответа.
Я пытаюсь предоставить CloseableHttpClient для Spring Cloud OpenFeign. В документации Spring Cloud Open Feign говорится, что он поддерживает CloeableHttpClient. В документации Spring не приводится ни одного примера фактической замены HTTP-клиента.
По сути, я предоставляю SSLContext HTTP-клиенту и хочу, чтобы Feign использовал этот загруженный SSLContext клиент. Как внедрить этот CloseableHttpClient в Feign?
Ниже приведена моя соответствующая конфигурация:
[*]Я использую SpringBootApp
@SpringBootApplication @EnableFeignClients Приложение публичного класса расширяет SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); } [*]Интерфейс клиента Feign выглядит следующим образом: import org.springframework.cloud.openfeign.FeignClient; // пропускаем остальную часть импорта для краткости @FeignClient(name ="remote-service", url = "${remote.service-url}", конфигурация = FeignConfig.class) общедоступный интерфейс RemoteServiceApi { @GetMapping(value = "/api/v1/resources/{Id}") public String getResource(@PathVariable("Id") String Id); } [*]Класс FeignConfig import org.apache.http.impl.client.CloseableHttpClient; // пропускаем остальную часть импорта для краткости общественный класс FeignConfig { @Бин общественный клиент CloseableHttpClient() { CloseableHttpClient httpClient=null; пытаться { //... Пропускаем код для краткости. // здесь создается «sslSocketFactory», используемый в построителе HttpClient ниже httpClient = HttpClients.custom().setSSLSocketFactory(sslSocketFactory) .setMaxConnTotal(10) .setMaxConnPerRoute(10) .строить(); }catch(IOException | KeyManagementException | UnrecoverableKeyException | NoSuchAlgorithmException | KeyStoreException | CertificateException e) { System.err.println("Исключение при создании HttpClient. : "+e.getMessage()); } вернуть httpClient; } } [*]В файле application.properties feign.httpclient.enabled установлено значение true [*]Версия Springboot — 2.4.4. Версия Feign — feign-core-10.10.1 Другая часть, которую я не понял, это то, как Spring собирался подключить этот пользовательский CloseableHttpClient к Feign, как он утверждает. Потому что во время отладки во время выполнения я вижу, что аннотированный интерфейс Feign реализован классом feign.SynchronousMethodHandler, а поле client в этом классе имеет тип feign.Client, а во время выполнения оно получает com.sun.security.ntlm.Client ( может быть реализацией по умолчанию). Как CloseableHttpClient должен быть внедрен в feign.Client? В Интернете очень мало примеров подобных вещей, и они не объясняют их.
Я нашел этот пост на SOF, но
[*]здесь также внедряется @Bean типа CloseableHttpClient [*]На этот вопрос нет полезного ответа.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение