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


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 杨寒光 2024-06-10 15:19 采纳率: 0% 浏览 3 首页/ 云计算 / 关于ribbon的重试机器,望解答 spring cloud 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次调用 ,在第一台实例第一次不算重试。)这个不是很理解 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 加载中... 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    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仓库。

      展开全部

      评论 编辑记录
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      926. 将字符串翻转到单调递增-前缀和算法解决
      Jenkins代理模式配置Maven工程
      引导流程分析——BIOS 与 UEFI
      最强人工智能 OpenAI 极简教程
      鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统
      计算机视觉中的可解释性分析
      应用方案 | 内置ALC的音频前置放大器D2538A和D3308芯片
      Hive简介及核心概念
      【鸟哥杂谈】十分钟使用命令行在云服务器Centos环境下搭建NodeJS环境
      Linux环境下安装并使用使用Git命令实现文件上传
    • 原文地址:https://ask.csdn.net/questions/8116490