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
을 사용할 때 프록시 서버를 사용할 수 있는지, 아니면 내가 사용할 수있는 대체 비 블로킹 클라이언트를 알고 있는지 어떻게 알 수 있습니까?
답변 해 주신 Jayson. 나는이 다른 고객들을 고려할 것이다. 즉, 내 관심사는 클라이언트가 비동기적일뿐만 아니라 비 차단적인 것입니다. 나는 이것에 대해 틀릴 수도 있지만, OkHttp와 Apache Http Components는 비동기 적으로 차단하고 있다고 생각한다. 권리? –
okHTTP는 "OkHttp에서 프레이밍 된 프로토콜을 통해 블로킹 API를 노출합니다."https://github.com/square/okhttp/wiki/Concurrency –
그러나 프록시 지원이 필요하면 기본 ' Netty4ClientHttpRequestFactory'를 사용하면 non-blocking을 포기하거나 새로운 구현체를 작성해야합니다. –