2016-09-09 1 views
0

SimpleRequestFactory를 AsyncRestTemplate과 함께 사용하면 HTTP 프록시 서버를 쉽게 구성 할 수 있습니다.Netty4ClientHttpRequestFactory를 사용하여 Spring AsyncRestTemplate에 프록시를 설정하는 방법?

나는 (코 틀린 샘플 코드) 할 수 있습니다 :

@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을 사용할 때 프록시 서버를 사용할 수 있는지, 아니면 내가 사용할 수있는 대체 비 블로킹 클라이언트를 알고 있는지 어떻게 알 수 있습니까?

답변

2

Netty4ClientHttpRequestFactory (source)와 관련된 클래스 같은 Netty4ClientHttpRequest (source)는 채널을 사용 SimpleChannelInboundHandler 프록시 처리기를 사용하지 않는다. 모든 것이 비공개이며 소스 내에서 재정의 될 수 없으므로 프록시를 지원하도록 변경할 수 없습니다. 모든 것을 거의 다시 작성해야합니다.

다른 비동기 클라이언트 옵션이 있으면 잘 작동하고 더 많은 구성 옵션을 사용할 수 있습니다. 포함 된 Netty는 상당히 기본입니다. OkHttpClientHttpRequestFactoryHttpComponentsAsyncClientHttpRequestFactory 모두 구성한 클라이언트에서 전달할 수 있습니다. 당신의 관심

+0

답변 해 주신 Jayson. 나는이 다른 고객들을 고려할 것이다. 즉, 내 관심사는 클라이언트가 비동기적일뿐만 아니라 비 차단적인 것입니다. 나는 이것에 대해 틀릴 수도 있지만, OkHttp와 Apache Http Components는 비동기 적으로 차단하고 있다고 생각한다. 권리? –

+0

okHTTP는 "OkHttp에서 프레이밍 된 프로토콜을 통해 블로킹 API를 노출합니다."https://github.com/square/okhttp/wiki/Concurrency –

+0

그러나 프록시 지원이 필요하면 기본 ' Netty4ClientHttpRequestFactory'를 사용하면 non-blocking을 포기하거나 새로운 구현체를 작성해야합니다. –

0

, AsyncRestTemplate의 다른 구현 :

SimpleClientHttpRequestFactory -> 간단한 스레드 풀, API를 차단, 프록시

OkHttpClient (OkHttp3) 지원 -> 차단 API를, 프록시 지원

CloseableHttpAsyncClient -> 비 차단 nio API, 프록시 지원

Netty4ClientHttpRequestFactory -> 비 차단 nio API, 프록시 지원되지 않음

자세한 내용은 https://github.com/wuxudong/VariousAsyncHttpClientPerformance을 방문하십시오.

관련 문제