¿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

  • No puedo excluir MongoAutoConfiguration en Springboot-Kotlin (MongoSocketOpenException)
  • Java vs Kotlin - Spring @Async methods en la misma class
  • Plantilla de Facebook de spring fetchObject a PagedList
  • Spring Data Elasticsearch con Script Field con Kotlin Data Class da como resultado un problema de serialization de Jackson
  • Spring Boot 2 y Kotlin (con Maven)
  • El comstackdor Kotlin regresa: Referencia no resuelta: springframework en Spring 5.0
  • No se puede usar la validation de spring con MongoDB
  • Spring Injecting util: map en Kotlin con tipo de security
  • ¿Qué es una propiedad abierta? ¿Por qué no puedo hacer que su setter sea privado?
  • No se pudo escribir JSON: no se pudo deserializar; la exception anidada es
  • Configuración de security de spring de Kotlin