[英]How to set proxy for Spring AsyncRestTemplate using Netty4ClientHttpRequestFactory?
当我将SimpleRequestFactory与AsyncRestTemplate一起使用时,可以轻松配置HTTP代理服务器。
我可以做(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)
}
或者,我可以简单地设置相应的系统属性: -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8008
。
但是,从我从SimpleClientHttpRequestFactory
切换到Netty4ClientHttpRequestFactory
的那一刻,没有明显的方法可以直接配置代理,并且此客户端似乎也不尊重系统属性。
val requestFactory = Netty4ClientHttpRequestFactory().apply {
this.setConnectTimeout(TimeUnit.SECONDS.toMillis(10).toInt())
this.setReadTimeout(TimeUnit.SECONDS.toMillis(10).toInt())
//this.setProxy(proxy) //???
}
一旦更改了netty客户端,我就不知道如何使其通过代理。
我对使用netty客户端的兴趣在于,我不仅想发出异步请求,而且希望它是非阻塞的。 我希望我不会在这里做出错误的假设。
有谁知道在使用Netty4ClientHttpRequestFactory
时如何使用代理服务器,或者知道我可以使用的Spring支持的另一种非阻塞客户端?
Netty4ClientHttpRequestFactory
( 源 )和相关类(例如Netty4ClientHttpRequest
( 源 ))将SimpleChannelInboundHandler
用于通道,而不使用代理处理程序。 一切都是私有的,无法在源代码中被覆盖,因此无法更改它以支持代理。 您将不得不几乎重写整个过程。
您还有其他异步客户端选项可以很好地工作,并允许您使用更多配置选项。 包含的Netty还是相当基本的。 OkHttpClientHttpRequestFactory
和HttpComponentsAsyncClientHttpRequestFactory
都允许您传入自己配置的客户端。
为了您的兴趣,AsyncRestTemplate的不同实现:
SimpleClientHttpRequestFactory->简单线程池,阻止api,支持代理
OkHttpClient(OkHttp3)->阻止api,支持代理
CloseableHttpAsyncClient->非阻塞Nio API,支持代理
Netty4ClientHttpRequestFactory->非阻塞NIO API,不支持代理
您可以访问https://github.com/wuxudong/VariousAsyncHttpClientPerformance了解更多详细信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.