You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

zuul+ribbon设置MaxAutoRetries为3,但却重复请求了8次,为什么会出现这种情况?

首先,需要确认在设置MaxAutoRetries时,是否特别考虑了请求重定向的情况。如果不是,那么重定向也会被视为一次请求,进而导致请求次数超过预设的MaxAutoRetries值。

其次,还需要检查请求是否在不同的服务实例之间反复轮换。如果是,那么MaxAutoRetries也会被重复计数并被迅速耗尽。

下面是一份相关代码示例,其中包括对请求重定向和服务实例轮换的特殊处理。

@Configuration
public class RibbonConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public IRule ribbonRule() {
        return new WeightedResponseTimeRule();
    }

    @Bean
    public IPing ribbonPing() {
        return new PingUrl();
    }

    @Bean
    public ServerListSubsetFilter serverListFilter() {
        ServerListSubsetFilter filter = new ServerListSubsetFilter();
        filter.setRetries(3); // 指定每个服务实例最多被重试 3 次
        filter.setIncludeHosts(HostFromConfig.getHosts()); // 设置要包含的服务主机列表
        return filter;
    }

    @Bean
    @Primary
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public RetryableRibbonLoadBalancingHttpClient ribbonHttpClient(
            IClientConfig config,
            ILoadBalancer loadBalancer,
            RetryHandler retryHandler) {

        return new RetryableRibbonLoadBalancingHttpClient(
                config,
                new HttpClientOptions(loadBalancer),
                retryHandler) {

            @Override
            public ClientHttpResponse execute(
                    final HttpRequest request,
                    final byte[] body,
                    final ClientHttpRequestExecution execution) throws IOException {

                /*
                 * 如果当前请求已经达到了最大重试次数,直接返回异常来终止请求。
                 */
                if (alreadyRetriedOrMaxRetriesReached(extractRetryable(request), config, loadBalancer)) {
                    throw new RuntimeException("Maximum retries reached.");
                }

                return super.execute(request, body, execution);
            }

            @Override
            protected HttpRequest applyRetryHeaders(
                    IClientConfig overriddenClientConfig,
                    HttpRequest request,
                    RibbonHttpResponse httpResponse,
                    Collection<String> retryableStatusCodes) {

                /*
                 * 如果发现请求被重定向,那么重试也需要使用新的重定向地址
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

2022技术盘点之平台云原生架构演进之道|社区征文

云平台层:重复利用云平台提供安全产品及能力,践行云平台安全最佳实践,保护云上资源及运维安全;- K8s层:利用K8s内置安全机制,配合业界主流安全工具平台进行安全检测,及时快速反馈反应;- 容器层:凭借腾讯云镜像安... 当Node出现故障宕机,会出现应用注册脏数据,需手动处理,造成业务请求异常。#### 4.2.3 Kubernetes Service方式##### 4.2.3.1 Kubernetes服务注册发现利用云原生服务注册发现需先理解Kubernetes中Service自动注...

替换 Spring Cloud,使用基于 Cloud Native 的服务治理

Eureka 会做一些健康检查。其逻辑比较简单:Eureka 不停地发请求,看心跳有没有定时上报上来。但 Spring Cloud 只能知道服务是否健康,无法阻止访问不健康的服务。如果要扩容或自恢复不健康的服务,需要在 Spring Clou... 比如 Spring Cloud Ribbon 做了很多安全、分流的工作,而这些工作其实跟业务本身相关度非常低。那么这些能力可以提取出来吗?社区给出了一个全新的答卷:Service Mesh。Service Mesh 所做的事情是在节点之间通过一个...

替换 Spring Cloud,使用基于 Cloud Native 的服务治理

Eureka 会做一些健康检查。其逻辑比较简单:Eureka 不停地发请求,看心跳有没有定时上报上来。但 Spring Cloud 只能知道服务是否健康,无法阻止访问不健康的服务。如果要扩容或自恢复不健康的服务,需要在 Spring Clou... 比如 Spring Cloud Ribbon 做了很多安全、分流的工作,而这些工作其实跟业务本身相关度非常低。那么这些能力可以提取出来吗?社区给出了一个全新的答卷:Service Mesh。**Service Mesh 所做的事情是在节点之间通过...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

zuul+ribbon设置MaxAutoRetries为3,但却重复请求了8次,为什么会出现这种情况? -优选内容

2022技术盘点之平台云原生架构演进之道|社区征文
云平台层:重复利用云平台提供安全产品及能力,践行云平台安全最佳实践,保护云上资源及运维安全;- K8s层:利用K8s内置安全机制,配合业界主流安全工具平台进行安全检测,及时快速反馈反应;- 容器层:凭借腾讯云镜像安... 当Node出现故障宕机,会出现应用注册脏数据,需手动处理,造成业务请求异常。#### 4.2.3 Kubernetes Service方式##### 4.2.3.1 Kubernetes服务注册发现利用云原生服务注册发现需先理解Kubernetes中Service自动注...
替换 Spring Cloud,使用基于 Cloud Native 的服务治理
Eureka 会做一些健康检查。其逻辑比较简单:Eureka 不停地发请求,看心跳有没有定时上报上来。但 Spring Cloud 只能知道服务是否健康,无法阻止访问不健康的服务。如果要扩容或自恢复不健康的服务,需要在 Spring Clou... 比如 Spring Cloud Ribbon 做了很多安全、分流的工作,而这些工作其实跟业务本身相关度非常低。那么这些能力可以提取出来吗?社区给出了一个全新的答卷:Service Mesh。Service Mesh 所做的事情是在节点之间通过一个...
替换 Spring Cloud,使用基于 Cloud Native 的服务治理
Eureka 会做一些健康检查。其逻辑比较简单:Eureka 不停地发请求,看心跳有没有定时上报上来。但 Spring Cloud 只能知道服务是否健康,无法阻止访问不健康的服务。如果要扩容或自恢复不健康的服务,需要在 Spring Clou... 比如 Spring Cloud Ribbon 做了很多安全、分流的工作,而这些工作其实跟业务本身相关度非常低。那么这些能力可以提取出来吗?社区给出了一个全新的答卷:Service Mesh。**Service Mesh 所做的事情是在节点之间通过...

zuul+ribbon设置MaxAutoRetries为3,但却重复请求了8次,为什么会出现这种情况? -相关内容

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询