如何在apache异步http客户端中设置重定向策略?我有这样的东西(scala代码)。注释代码按预期工作,但我无法每秒对一个主机执行超过4个并发请求,第二个版本可以处理更多并发连接但根本不处理重定向。
object HttpClientManager {
def createHttpClient(): CloseableHttpAsyncClient = { //cm: NHttpClientConnectionManager
/*
val httpClient = HttpAsyncClients
.custom()
.setDefaultRequestConfig(config)
//.setConnectionManager(cm)
.build()
*/
// val config = RequestConfig.custom()
// .setSocketTimeout(3000)
// .setConnectTimeout(3000).build();
val socketConfig = SocketConfig.custom()
.setSoTimeout(15000)
.build();
val connectionConfig = ConnectionConfig.custom()
.setBufferSize(8 * 1024)
.setFragmentSizeHint(8 * 1024)
.build();
val ioreactor = new DefaultConnectingIOReactor();
val mgr = new PoolingNHttpClientConnectionManager(ioreactor);
mgr.setDefaultSocketConfig(socketConfig);
mgr.setDefaultConnectionConfig(connectionConfig);
mgr.setDefaultMaxPerRoute(100)
mgr.setMaxTotal(200)
val httpclient = HttpAsyncClients.createMinimal(mgr);
httpclient.start()
httpclient
}
}
答案 0 :(得分:2)
CloseableHttpAsyncClient client = HttpAsyncClients.custom()
.setRedirectStrategy(LaxRedirectStrategy.INSTANCE)
.build();
由HttpAsyncClients#createMinimal
创建的最小客户端使用与其“完整”对应的绝对相同的连接管理代码。它与它不同之处在于,它只提供最小的协议管道,以便在人们准备牺牲非必要协议方面的情况下提供更好的性能:代理支持,重定向,身份验证和状态管理。因此,最小的实现只是不处理重定向。
答案 1 :(得分:0)
您可以直接在Apache Request对象上进行设置,而无需实例化单独的客户端对象。
stateCities: ({ selectedState, cities }) => {
if (selectedState) {
return cities.filter(({ state }) =>
selectedState.abbr === state || selectedState.name === state)
}
return cities
}