【问题标题】:How to set redirect strategy in apache async http client如何在 apache 异步 http 客户端中设置重定向策略
【发布时间】:2013-11-06 20:07:31
【问题描述】:

如何在 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
}
 }

【问题讨论】:

    标签: java apache scala asynchronous apache-httpclient-4.x


    【解决方案1】:
    CloseableHttpAsyncClient client = HttpAsyncClients.custom()
           .setRedirectStrategy(LaxRedirectStrategy.INSTANCE)
           .build();
    

    HttpAsyncClients#createMinimal 创建的最小客户端使用与其“成熟”对应的完全相同的连接管理代码。它与它的不同之处在于仅提供最小的协议管道,以便在人们准备牺牲非必要协议方面的场景中提供更好的性能:代理支持、重定向、身份验证和状态管理。因此,最小实现根本不处理重定向。

    【讨论】:

    • 感谢您的回复,但这并不能解决我的问题。当我尝试使用您的代码时,性能很糟糕,我找不到如何让它变得更好。我应该怎么办?在我决定问这个问题之前,我已经尝试解决了几天。还是我应该尝试使用非异步版本的 apache http 客户端?
    • 我在检查您以前的答案时找到了解决方案:) 非常感谢 :)
    • @webczarnecki:性能问题与重定向处理无关。如果原始数据吞吐量方面的性能是您最关心的问题,那么您将更适合使用体面的阻塞 HTTP 客户端。
    • LaxRedirectStrategy 根据文档仅对 POST 请求禁用它。请参阅下面的答案以根据任何请求禁用它。
    【解决方案2】:

    您可以直接在 Apache Request 对象上设置,无需实例化单独的客户端对象。

    apacheHttpRequestObject.setConfig(RequestConfig.custom().setRedirectsEnabled(false).build())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-30
      • 2013-07-16
      • 1970-01-01
      • 2012-11-10
      • 2010-12-03
      • 2014-03-01
      • 2023-01-02
      • 2016-10-27
      相关资源
      最近更新 更多