【问题标题】:Apache Camel https4 client not using the same tcp port for multiple requests with keepAlive=trueApache Camel https4 客户端未对 keepAlive=true 的多个请求使用相同的 tcp 端口
【发布时间】:2019-04-04 13:28:05
【问题描述】:

您好,我正在使用 Apache camel http4 组件 发送带有 keepAlive=truehttps 请求,但是当我在发送多个请求后看到 netstat 时,我看到了每个请求为对等方打开一个新的 TCP 端口
我觉得这不应该是 keepAlive 事务 的常见行为,为什么没有重用 相同的 TCP 端口与服务器通信,如果有的话,如何实现可以的。

【问题讨论】:

  • 添加一些代码来显示您如何配置keepAlive,因为在当前文档中没有keepAlive=true 用于HTTP4 组件的选项。
  • 我使用一个http4组件,然后使用http4组件调用url,keepAlive=true作为请求头。下面是代码。 https4rtti://someHostName/res ?keepAlive=true
  • 当我检查目标地址的 netstat 时,我每次都会看到一个新的 tcp 端口连接正在建立,几秒钟后状态变为 CLOSE_WAIT。

标签: https apache-camel keep-alive


【解决方案1】:

原来这不是一个存活问题;连接实际上保持正常。问题是连接作为默认 PoolingHttpClientConnectionManager 管理的池的一部分没有被重用。通过启用 Apache 的 HttpClient(在后台使用)的日志记录,可以很容易地看到这两件事:

正在使用 Keep-Alive:

2018/12/19 07:59:17:470 CET [DEBUG] 线 - http-outgoing-7

2018/12/19 08:00:08:240 CET [DEBUG] PoolingHttpClientConnectionManager - 连接请求:[路由:{s}->https://someurl.com:443][total保持活动状态:1;分配的路线:1 of 1;总分配:1 of 1] 2018/12/19 08:00:08:240 CET [调试] DefaultManagedHttpClientConnection - http-outgoing-7:关闭连接 2018/12/19 08:00:08:242 CET [DEBUG] PoolingHttpClientConnectionManager - 连接租用:[id:8][路由:{s}->https://someurl.com:443][total保持活动状态:0;分配的路线:1 of 1;总分配:1 of 1] 请注意,可以通过在启动时向 JVM 传递一些参数来轻松启用 HttpClient 的日志记录。

那么,为什么连接不被重用呢?这是因为正在使用 SSL 并且 Apache 的 HttpClient 使用的 PoolingHttpClientConnectionManager 不允许重用连接,以防现有连接的用户主体与请求的连接不同(由 DefaultUserTokenHandler 促进)。另见例如这个 Stackoverflow 帖子。解决方案是实现一个自定义的 UserTokenHandler (或者使用 NullTokenHandler 如果足够的话)并相应地配置 HttpClientBuilder 。

【讨论】:

    【解决方案2】:

    您是否已经分析了 HTTP 响应标头,以检查是否考虑了 KeepAlive 以及使用哪个超时值。

    预期响应示例:

    HTTP/1.1 200 OK
    Connection: Keep-Alive
    Keep-Alive: timeout=10, max=20
    Content-Type: text/html; charset=UTF-8
    Date: ...
    Content-Length: ...
    

    【讨论】:

    • content-type application/xml connection keep-alive content-length 258 #status# HTTP/1.1 200 OK
    • 是的,我已经检查并在上面给出了响应标头。它们包含 keep-Alive
    猜你喜欢
    • 2019-03-31
    • 2014-08-04
    • 2021-10-10
    • 2019-05-02
    • 2013-05-25
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多