Feign客户端http连接问题

问题描述 投票:0回答:1

我使用 feign 客户端连接下游系统。最近下游系统发生了中断,但令人惊讶的是,一旦下游系统启动并运行,从我们系统到下游系统的所有调用都开始超时。没有任何调用到达下游系统,但它们在我们的系统中相当超时。

这是 feign 配置:

feign:
  httpclient:
    max-connections: 300
    max-connections-per-route: 200
    follow-redirects: true

  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000
      Client1:
        readTimeout: 1200000
      Client2:
        readTimeout: 1200000
apache-httpclient-4.x spring-cloud-feign feign
1个回答
0
投票

Feign 客户端在下游系统中断后开始超时的问题可能是由多种因素引起的。以下是诊断和解决问题的详细方法:

诊断和潜在原因

  1. 连接池问题

    • 原因:连接池可能已耗尽或由于中断而处于不良状态。
    • 检查:确保连接池配置(
      max-connections
      max-connections-per-route
      )与下游系统的容量一致。有时,断电后,连接可能无法正确清理。
  2. 连接状态:

    • 原因:中断后池中的连接状态可能不一致或无效。
    • 检查:检查连接管理和池设置。确保 Feign 使用的 HTTP 客户端库正确关闭和重用连接。
  3. 超时设置:

    • 原因:配置的超时可能不足以满足网络条件或正在执行的特定操作。
    • 检查:验证
      connectTimeout
      readTimeout
      值是否适合您的用例。除非处理非常长时间运行的操作,否则
      readTimeout
      为 20 分钟(
      1200000
      毫秒)是不寻常的。
  4. Feign 配置

    • 原因:Feign 客户端设置中的错误配置可能会导致问题。
    • 检查:确认 Feign 客户端配置已正确应用,并且不存在可能影响行为的覆盖设置。
  5. 网络问题

    • 原因:网络问题或 DNS 解析问题可能会影响连接。
    • 检查:验证网络连接和 DNS 设置。确保不存在影响连接的间歇性网络问题。

推荐

  1. 查看和调整连接池设置

    • 确保连接池大小足以满足您的应用程序的需求。如有必要,调整
      max-connections
      max-connections-per-route
  2. 检查连接管理

    • 了解 Feign 客户端和底层 HTTP 客户端库如何管理和重用连接。确保正确清理和重新初始化。
  3. 调整超时值:

    • 考虑将
      connectTimeout
      readTimeout
      设置调整为更合理的值。超时过多可能会掩盖根本问题。
  4. 断电后测试

    • 在模拟中断后测试 Feign 客户端的行为,以了解它们如何恢复并确保正确重新建立连接。
  5. 检查日志和监控

    • 检查应用程序日志和监控工具中是否有错误或警告,这可能有助于深入了解超时问题的根本原因。

这是一个可能更典型的示例配置:

feign:
  httpclient:
    max-connections: 100
    max-connections-per-route: 50
    follow-redirects: true

  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 10000  # Consider a shorter readTimeout
      Client1:
        readTimeout: 10000
      Client2:
        readTimeout: 10000

此配置提供了更标准的连接和超时设置方法,应根据您的具体要求和测试结果进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.