2016-09-09 11 views
0

AsyncRestTemplateでSimpleRequestFactoryを使用すると、HTTPプロキシサーバーを簡単に構成できます。Netty4ClientHttpRequestFactoryを使用してSpring AsyncRestTemplateのプロキシを設定する方法は?

Iは、(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でサポートされている代替のノンブロッキングクライアントを知っている場合は、どのようにプロキシサーバーを使用できますか?

答えて

2

Netty4ClientHttpRequestFactorysource)および関連するクラスは、次のようなNetty4ClientHttpRequestsource)は、チャネルのためSimpleChannelInboundHandlerを使用し、プロキシハンドラを使用しないでください。すべてがプライベートであり、ソース内でオーバーライドできないため、プロキシをサポートするように変更する方法はありません。すべてを書き直す必要があります。

非常にうまく動作し、より多くの設定オプションが可能な他の非同期クライアントオプションがあります。とにかく、含まれているNettyのものはかなり基本的です。 OkHttpClientHttpRequestFactoryHttpComponentsAsyncClientHttpRequestFactoryは、どちらも設定したクライアントで渡すことができます。あなたの興味に

+0

ご回答ありがとうございます。私はこれらの他のクライアントに配慮します。つまり、私の興味は、クライアントが非同期だけでなく、非ブロッキングでもあるということです。私はこれで間違っているかもしれませんが、私はOkHttpとApache Http Componentsの両方が、非同期だが、残念ながらブロックしていると思います。右? –

+0

okHTTPは、「OkHttpでは、フレーム化されたプロトコルを介してブロッキングAPIを公開しています」https://github.com/square/okhttp/wiki/Concurrency –

+0

プロキシサポートが必要な場合は、デフォルトの ' Netty4ClientHttpRequestFactory'を使用して、非ブロックをあきらめたり、新しい実装を記述したりする必要があります。 –

0

、AsyncRestTemplateの異なる実装:

SimpleClientHttpRequestFactory - >シンプルなスレッドプール、APIをブロックし、プロキシが

OkHttpClient(OkHttp3)サポート - >ブロッキングAPI、プロキシがサポートさ

CloseableHttpAsyncClient - >ノンブロッキングnio api、プロキシサポート

Netty4ClientHttpRequestFactory - >ノンブロッキングnio API、プロキシはサポートされていません

詳細はhttps://github.com/wuxudong/VariousAsyncHttpClientPerformanceをご覧ください。

関連する問題