spring cloud 微服务环境里面feignclient如何配置重试?

提问者:帅平 问题分类:微服务
spring cloud 微服务里面有a,b,c三个微服务,之间都有使用feignclient调用其他服务,但是可能涉及到服务重启等,如何配置feignclient让他调不通的时候等待5秒钟再进行重试
2 个回答
单身成瘾i
单身成瘾i
给一个新的案例,有对应的超时时间配置:
# 在 application.yml 中配置
feign:
  client:
    config:
      default: # 全局默认配置
        connectTimeout: 10000 # 连接超时10秒
        readTimeout: 10000    # 读取超时10秒
  retry:
    enabled: true # 启用重试机制
    max-attempts: 3 # 最大尝试次数(首次调用 + 重试2次)
    back-off:
      enabled: true # 启用退避策略(等待机制)
      initial-interval: 2000 # 首次重试等待2秒
      multiplier: 2.5 # 下一次重试等待时间为前一次的2.5倍,即第二次重试等待 2 * 2.5=5秒 
# 重要:如果使用了Spring Cloud LoadBalancer,建议禁用其重试以避免叠加
spring:
  cloud:
    loadbalancer:
      retry:
        enabled: false # 避免Feign重试和LoadBalancer重试同时生效
发布于:1天前 IP属地:四川省
拜你所赐
拜你所赐
可以直接在application.yaml文件中进行配置,feign支持配置重试,示例如下:
# 在服务A、B、C的application.yml中配置
feign:
  retry:
    enabled: true  # 启用Feign重试
    max-attempts: 4  # 总共尝试4次(初始1次 + 重试3次)
    backoff:
      enabled: true  # 启用退避策略(即重试等待)
      initial-interval: 2000  # 首次重试间隔为2秒
      multiplier: 2.5  # 后续重试间隔为前一次的2.5倍(第二次:2 * 2.5=5秒)
ribbon:
  ConnectTimeout: 1000  # 连接超时1秒
  ReadTimeout: 5000     # 读超时5秒
这个配置示例的重试过程描述如下:
首次调用失败。
第一次重试(第1次重试):等待 2秒 后发起。
第二次重试(第2次重试):如果再次失败,等待时间变为 2秒 * 2.5 = 5秒,满足您等待5秒重试的要求。
第三次重试(第3次重试):如果仍然失败,等待时间变为 5秒 * 2.5 = 12.5秒。
若所有尝试(共4次)均失败,则最终返回错误。
发布于:1天前 IP属地:四川省
我来回答