Java 如何使用Netty4ClientHttpRequestFactory为Spring AsyncRestTemplate设置代理?
当我将SimpleRequestFactory与AsyncRestTemplate一起使用时,我可以轻松地配置HTTP代理服务器 我可以这样做(Kotlin中的示例代码): 或者我可以简单地设置相应的系统属性:Java 如何使用Netty4ClientHttpRequestFactory为Spring AsyncRestTemplate设置代理?,java,spring,netty,kotlin,Java,Spring,Netty,Kotlin,当我将SimpleRequestFactory与AsyncRestTemplate一起使用时,我可以轻松地配置HTTP代理服务器 我可以这样做(Kotlin中的示例代码): 或者我可以简单地设置相应的系统属性:-Dhttp.proxyHost=127.0.0.1-Dhttp.proxyPort=8008 但是,当我从SimpleClientHttpRequestFactory切换到Netty4ClientHttpRequestFactory时,没有明显的方法直接配置代理,而且该客户端似乎也不尊重
-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客户端感兴趣的是,我不仅希望发出异步请求,而且希望它是非阻塞的。我希望我在这里没有做出错误的假设
有人知道在使用Netty4ClientPrequestFactory时如何使用代理服务器吗?或者有人知道我可以使用Spring支持的替代非阻塞客户端吗?该()和相关类(如())用于通道,而不使用代理处理程序。所有内容都是私有的,无法在源代码中重写,因此无法将其更改为支持代理。你几乎得重写整件事
您还有其他异步客户机选项,这些选项可以很好地工作,并允许您使用更多配置选项。不管怎么说,这本书所包含的网络版是相当基本的okhttpclienthtprequestfactory
和httpcomponentsasyncclienthtprequestfactory
都允许您传入自己配置的客户端。()和相关类(如())用于通道,而不使用代理处理程序。所有内容都是私有的,无法在源代码中重写,因此无法将其更改为支持代理。你几乎得重写整件事
您还有其他异步客户机选项,这些选项可以很好地工作,并允许您使用更多配置选项。不管怎么说,这本书所包含的网络版是相当基本的
OkHttpClientHttpRequestFactory
和HttpComponentsAsyncClientHttpRequestFactory
都允许您传入自己配置的客户端。您感兴趣的是,AsyncRestTemplate的不同实现:
SimpleClientHttpRequestFactory->简单线程池,阻止api,支持代理
OkHttpClient(OkHttp3)->阻止api,支持代理
CloseableHttpAsyncClient->非阻塞nio api,支持代理
Netty4ClientHttpRequestFactory->非阻塞nio api,不支持代理
有关AsyncRestTemplate的不同实现的更多详细信息,请访问: SimpleClientHttpRequestFactory->简单线程池,阻止api,支持代理 OkHttpClient(OkHttp3)->阻止api,支持代理 CloseableHttpAsyncClient->非阻塞nio api,支持代理 Netty4ClientHttpRequestFactory->非阻塞nio api,不支持代理
您可以访问了解更多详细信息谢谢您的回答,杰森。我会考虑其他客户。也就是说,我的兴趣在于客户端不仅是异步的,而且是非阻塞的。在这一点上我可能是错的,但我认为OkHttp和ApacheHTTP组件虽然是异步的,但不幸的是它们都被阻塞了。对吗?okHTTP做了一些混合的事情,“在okHTTP中,我们在一个框架协议上公开一个阻塞API”,但是如果需要代理支持,你不能使用默认的
Netty4ClientHttpRequestFactory
,所以你必须放弃非阻塞或编写一个新的实现。大多数使用非阻塞I/O的应用程序都使用自己的线程池来工作,在这一点上,您并没有像Netty一样参与同一个事件循环,因此您会导致线程间的上下文转移,并以其他方式阻塞。无论如何,这与你的问题无关。谢谢你的回答杰森。我会考虑其他客户。也就是说,我的兴趣在于客户端不仅是异步的,而且是非阻塞的。在这一点上我可能是错的,但我认为OkHttp和ApacheHTTP组件虽然是异步的,但不幸的是它们都被阻塞了。对吗?okHTTP做了一些混合的事情,“在okHTTP中,我们在一个框架协议上公开一个阻塞API”,但是如果需要代理支持,你不能使用默认的Netty4ClientHttpRequestFactory
,所以你必须放弃非阻塞或编写一个新的实现。大多数使用非阻塞I/O的应用程序都使用自己的线程池来工作,在这一点上,您并没有像Netty一样参与同一个事件循环,因此您会导致线程间的上下文转移,并以其他方式阻塞。无论如何,这与你的问题无关。
val requestFactory = Netty4ClientHttpRequestFactory().apply {
this.setConnectTimeout(TimeUnit.SECONDS.toMillis(10).toInt())
this.setReadTimeout(TimeUnit.SECONDS.toMillis(10).toInt())
//this.setProxy(proxy) //???
}