当前位置: 首页 > 知识库问答 >
问题:

spring CircuitBreakerRetryPolicy:为所有请求打开电路

魏旭
2023-03-14

我想使用spring重试实现断路器设计模式。我面临的主要问题是为所有请求打开电路。如果我从浏览器发出新请求,它仍然会继续重试。

我有一个RetryTemplate,其CircuitBreakerRetryPolicy定义如下:

@Configuration
public class MyApplicationConfig {

    @Bean
    public RetryTemplate retryTemplate(RetryPolicy cbRetry) {
        RetryTemplate retryTemplate = new RetryTemplate();

        FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
        fixedBackOffPolicy.setBackOffPeriod(1000);

        retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
        retryTemplate.setRetryPolicy(circuitBreakerRetryPolicy);
        return retryTemplate;
    }

    @Bean("cbRetry")
    public RetryPolicy circuitBreaker() {
        CircuitBreakerRetryPolicy circuitBreakerRetryPolicy = new CircuitBreakerRetryPolicy();
        circuitBreakerRetryPolicy.setResetTimeout(20000);
        circuitBreakerRetryPolicy.setOpenTimeout(2000);
        return circuitBreakerRetryPolicy;
    }
}

然后我使用resttemplate调用一个不存在的url,只是为了使调用失败,并计算重试次数。电路本应在2秒钟内打开,但如果我在第一次通话失败后再尝试另一次通话,它会继续重试。

如何使电路在给定的openTimeOut期间内对所有传入请求保持打开状态?

我通过将retrystate提供给retryTemplate调用来试验它,但这也没有帮助。

谢谢!

共有1个答案

公冶经纶
2023-03-14

spring重试状态是线程绑定的。

您需要编写一个自定义策略来维护全局状态。

 类似资料:
  • 问题内容: 我已经使用CodeIgniter创建了一个webapp。我在应用程序中的几个地方都使用了ajax。 我想知道是否有一种方法可以停止对ajax控制器的直接访问和查询,并且仅允许处理源自页面的合法ajax请求。 谢谢。 问题答案: 是的,您可以毫无问题地做到这一点。CodeIgniter输入类具有一个称为is_ajax_request()的方法。只需在控制器操作开始时检查一下即可。例如:

  • 问题内容: 我有一个react / redux应用程序,可从api服务器获取令牌。用户验证后,我想使所有axios请求都将该令牌作为Authorization标头,而不必手动将其附加到操作中的每个请求。我对React / Redux相当陌生,并且不确定采用最佳方法,也没有在Google上找到任何高质量的点击。 这是我的redux设置: 我的令牌存储在的redux存储中。 我对如何进行有点迷茫。我试

  • 问题内容: 我似乎无法让$ httpProvider.interceptors实际进行拦截。我在JSFiddle上创建了一个示例,该示例记录了拦截器运行的时间以及$ http响应成功的时间。在成功返回响应之后,将运行请求拦截器。这似乎有些倒退。 我不能使用transformRequest,因为我需要更改配置中的参数。该部分未显示在示例中。 我正在使用AngularJS 1.1.5 http://j

  • 目前,我正在使用mrecestQueue.cancelAll(getActive())在一个片段中的on Stop方法,但显然,当我将手机从横向移动到纵向时,它仍然返回请求中的数据,但会导致崩溃,因为持有人数据泄露已经存在了。有什么如何正确处理的示例代码吗?

  • 我正在docker容器中部署一个应用程序,它在启动时随机分配端口。问题是我想使用< code>docker-compose,但是有没有一种方法可以使用docker-compose公开服务的所有端口?如果没有docker-compose,我会使用< code>docker run...-P 谢谢

  • 但是在随机设置上面注释后的真实行为像:pod1、pod1、pod2、pod2、pod3、pod1、pod2、pod2....这是不正确的。 我们是否需要配置任何openshift配置,使其完善的RoundRoubin?