¿Cómo establecer el proxy para Spring AsyncRestTemplate usando Netty4ClientHttpRequestFactory?

Cuando uso un SimpleRequestFactory con mi AsyncRestTemplate puedo configurar fácilmente un server proxy HTTP.

Puedo hacerlo (código de muestra en Kotlin):

@Bean open fun asyncRestTemplate(): AsyncRestTemplate { val proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("127.0.0.1", 8008)) val requestFactory = SimpleClientHttpRequestFactory().apply { this.setConnectTimeout(TimeUnit.SECONDS.toMillis(10).toInt()) this.setReadTimeout(TimeUnit.SECONDS.toMillis(10).toInt()) this.setProxy(proxy) this.setTaskExecutor(taskExecutor()) } return AsyncRestTemplate(requestFactory) } 

O simplemente puedo establecer las properties del sistema correspondientes: -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8008 .

Sin embargo, en el momento en que paso de SimpleClientHttpRequestFactory a Netty4ClientHttpRequestFactory no hay una forma evidente de configurar el proxy directamente y parece que este cliente tampoco respeta las properties del sistema.

 val requestFactory = Netty4ClientHttpRequestFactory().apply { this.setConnectTimeout(TimeUnit.SECONDS.toMillis(10).toInt()) this.setReadTimeout(TimeUnit.SECONDS.toMillis(10).toInt()) //this.setProxy(proxy) //??? } 

Una vez que cambio para el cliente de Netty, no tengo ni idea de cómo hacerlo pasar por el proxy.

Mi interés en usar el cliente de netty era que no solo quería hacer requestes asíncronas, sino que también quería que no fuera bloqueado. Espero no estar haciendo una suposition equivocada aquí.

¿Alguien sabe cómo puedo usar un server proxy cuando uso Netty4ClientHttpRequestFactory o quizás conozco un cliente alternativo no bloqueante compatible con Spring que pueda usar?

Netty4ClientHttpRequestFactory ( fuente ) y classs relacionadas como Netty4ClientHttpRequest ( fuente ) usan SimpleChannelInboundHandler para el canal y no usan el controller de proxy. Todo es privado y no puede anularse dentro de la fuente, por lo que no hay forma de cambiarlo para que sea compatible con Proxies. Tendría que volver a escribir casi todo el asunto.

Tiene otras opciones de cliente asíncronas que funcionarán muy bien y le permitirán más opciones de configuration. El Netty incluido es bastante básico de todos modos. OkHttpClientHttpRequestFactory y HttpComponentsAsyncClientHttpRequestFactory permiten pasar su propio cliente configurado.

Para su interés, la implementación diferente de AsyncRestTemplate:

SimpleClientHttpRequestFactory -> grupo de subprocesss simple, api de locking, proxy compatible

OkHttpClient (OkHttp3) -> locking de API, proxy compatible

CloseableHttpAsyncClient -> non-blocking nio api, proxy supported

Netty4ClientHttpRequestFactory -> non-blocking nio api, proxy no compatible

puede visitar https://github.com/wuxudong/VariousAsyncHttpClientPerformance para get más detalles

  • Hacer reference al valor y a los methods de llamada en types de class generics
  • Kotlin + Spring Boot solicita sorting
  • Configurar un proyecto Spring Boot con Kotlin
  • Kotlin no puede crear el campo @Autowinetworking en Class anotado con @Configuration @EnableWebMvc
  • ¿Qué es una propiedad abierta? ¿Por qué no puedo hacer que su setter sea privado?
  • Spring Boot: no puede include recurso estático
  • JsonView en Spring + Kotlin
  • El controller de exception Spring Boot @ControllerAdvice no se activa
  • Spring MVC Error 404 Bad Request Kotlin
  • No tiene acceso al controller de arranque de Spring, pero tiene acceso a index.html
  • Iniciación de la class Kotlin Spring con aspecto