Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Netty4ClientHttpRequestFactory为Spring AsyncRestTemplate设置代理?_Java_Spring_Netty_Kotlin - Fatal编程技术网

Java 如何使用Netty4ClientHttpRequestFactory为Spring AsyncRestTemplate设置代理?

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时,没有明显的方法直接配置代理,而且该客户端似乎也不尊重

当我将SimpleRequestFactory与AsyncRestTemplate一起使用时,我可以轻松地配置HTTP代理服务器

我可以这样做(Kotlin中的示例代码):

或者我可以简单地设置相应的系统属性:
-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) //???
}