杨寒光 2024-06-10 15:19 采纳率: 0%
浏览 3

关于ribbon的重试机器,望解答


ribbon:
  MaxAutoRetries: 1 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试
  MaxAutoRetriesNextServer: 1 #切换实例的重试次数
  OkToRetryOnAllOperations: true # 对所有的操作请求都进行重试,如果是get则可以,如果是post,put等操作没有实现幂等的情况下是很危险的
  ConnectTimeout: 250 #请求连接的超时时间
  ReadTimeout: 1000 #请求处理的超时时间
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 4500
            #如果配置ribbon的重试,hystrix的超时时间要大于ribbon的超时时间,ribbon才会重试
            #hystrix的超时时间

想问下这段配置,ribbon一共会重试几次,我测试了下,在只有一个服务实例情况下一共会调用4次,这个不是很理解。
MaxAutoRetries这个意思是同一实例的重试次数,MaxAutoRetriesNextServer意思是同一服务不同实例的重试次数。
但是如果只有一个服务实例,MaxAutoRetriesNextServer=1应该不生效才是,因为根本没有不同实例。不理解这里为什么会重试3次呢?
看网上的解答是:(根据上面的参数计算发起请求的次数:

1+1+(MaxAutoRetries + MaxAutoRetriesNextServer)

即重试3次 则一共产生4次调用 ,在第一台实例第一次不算重试。)
这个不是很理解

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-06-10 15:33
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在Spring Cloud Ribbon中,Ribbon是一个客户端负载均衡器,它与Eureka服务发现组件一起使用,以提供服务的客户端负载均衡。Ribbon的配置参数影响着它如何进行重试和负载均衡。

    根据你提供的配置信息,我们可以分析以下几个关键点:

    1. MaxAutoRetries:这个参数定义了当请求失败时,Ribbon在同一服务实例上进行重试的最大次数。在你提供的配置中,这个值是1。

    2. MaxAutoRetriesNextServer:这个参数定义了当请求失败并且在同一服务实例上重试达到MaxAutoRetries次后,Ribbon将尝试切换到其他服务实例进行请求的最大次数。在你提供的配置中,这个值也是1。

    3. OkToRetryOnAllOperations:这个参数设置为true,意味着Ribbon将对所有类型的HTTP请求进行重试,包括GET、POST、PUT等。这通常只在请求是幂等的情况下是安全的。

    4. ConnectTimeoutReadTimeout:分别定义了连接超时时间和读取超时时间。

    关于你的问题,为什么在只有一个服务实例的情况下,请求会被调用4次,这可能与Ribbon的重试机制和Hystrix的超时时间配置有关。根据你提供的配置和网上的解答,我们可以这样理解:

    • 第一次请求:正常发起请求。
    • 第二次请求:如果第一次请求失败,根据MaxAutoRetries,Ribbon会在同一个实例上重试一次。
    • 第三次请求:如果第二次请求仍然失败,并且OkToRetryOnAllOperations为true,Ribbon会尝试使用MaxAutoRetriesNextServer的配置,即使只有一个实例,它也会尝试“切换”到同一个实例,这可以看作是一种“虚拟”的重试。
    • 第四次请求:如果第三次请求失败,根据MaxAutoRetriesNextServer,Ribbon会再次在同一实例上重试。

    这里的关键点是,即使只有一个实例,Ribbon的逻辑仍然会尝试执行MaxAutoRetriesNextServer定义的重试,这可能导致了你观察到的4次调用。

    至于代码实现,Spring Cloud Ribbon的源码可以在其GitHub仓库中找到,但具体的实现细节可能需要深入阅读源码来理解。对于参考资料,Spring Cloud的官方文档和社区论坛是很好的资源,你可以在这些地方找到更多关于Ribbon和Hystrix配置和使用的信息。

    这里是Spring Cloud的官方文档链接,你可以在这里找到更多关于Ribbon的信息: Spring Cloud官方文档

    请注意,由于我的知识截止日期是2023年,上述链接和信息可能已经有所更新。如果你需要最新的信息,请访问Spring Cloud的官方网站或GitHub仓库。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月10日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表