记录一次feign.RetryableException: timeout executing POST……问题

问题

因为数据量过大,公司项目访问外部接口一直报标题所示的超时问题,各种百度过后,基本都是hystrix和ribbon的锅。

解决方法

尝试更改hystrix和ribbon的超时时间为600000毫秒(十分钟):

ribbon:
  ReadTimeout: 600000 # 处理时间
  ConnectTimeout: 600000 # 连接时间
  MaxAutoRetries: 0 #最大自动重试次数
  MaxAutoRetriesNextServer: 1 # 换实例重试次数
  MaxTotalHttpConnections: 2000 # 最大http连接数,越大越好,但到到达一个临界点之后,就不会提高响应速度了
  MaxConnectionsPerHost: 1000 # 每个host连接数
  okhttp:
    enabled: true
hystrix:
  threadpool:
    default:
      coreSize: 20
      maximumSize: 50
      maxQueueSize: -1
      allowMaximumSizeToDivergeFromCoreSize: true
  command:
    alpha-routeservice:
      execution:
        timeout:
          enabled: true
        isolation:
          strategy: THREAD
          thread:
            interruptOnTimeout: false
            timeoutInMilliseconds: 600000
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          strategy: THREAD
          thread:
            interruptOnTimeout: false
            timeoutInMilliseconds: 600000

更改后重新调试接口,问题依然存在,多次尝试后,才发现问题可能并不是ribbon上。因为负责调用的框架是feign,所以最终尝试修改feign的超时时间:

feign:
  okhttp:
    enabled: true
  client:
    config:
      default:
        connect-timeout: 600000
        read-timeout: 600000

OK,问题完美解决。

你可能感兴趣的:(java)