Fegin+Sentinel 解决服务调用首次调用失败问题

网上常见的是Fegin和Hystrix集成后,容易重现首次调用失败的问题,而我们是Fegin+Sentinel集成后导致的

Fegin和Hystrix集成后,造成该问题的原因

Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒

解决方案有三种

方法一
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000
该配置是让Hystrix的超时时间改为5秒

方法二
hystrix.command.default.execution.timeout.enabled: false
该配置,用于禁用Hystrix的超时时间

方法三
feign.hystrix.enabled: false
该配置,用于索性禁用feign的hystrix。该做法除非一些特殊场景,不推荐使用

Fegin和Sentinel集成后,造成首次请求失败的原因

当服务的返回时间大于ribbon的超时时间,会触发重试或断开触发 Fallback,超时时间默认1s
解决问题:在application.yml中新增ribbon配置,配置过后,首次请求失败问题就解决了

ribbon:
  ## 等待超时时间
  ReadTimeout: 3000

或是feign配置

feign:
  sentinel:
    enabled: true
  client:
    config:
      default:
        # 设置Fegin的超时时间
        connectTimeout: 3000
        readTimeout: 3000

参考资料

Spring Boot Openfeign
解决Spring Cloud中Feign/Ribbon第一次请求失败的方法

你可能感兴趣的:(Spring,Cloud微服务,微服务)