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

如何根据条件跳过vertx断路器中的重试

堵才哲
2023-03-14

我目前正在使用Vertx断路器尝试重试请求事件总线。基于ReplyException。回复失败我想跳过或避免重试。

例如,当事件总线以ReplyFailure响应时,我不希望重试。收件人_失败,因为这种错误不是应用程序错误,而是逻辑验证失败。

下面是我的代码,

    CircuitBreaker breaker = CircuitBreaker.create("my-circuit-breaker", vertx,
                    new CircuitBreakerOptions()
                            .setMaxFailures(2) 
                            .setTimeout(5 * 1000) 
                            .setFallbackOnFailure(true) 
                            .setResetTimeout(5000) 
                            .setMaxRetries(2)
).retryPolicy(retryCount -> retryCount * 5000L);

使用如下断路器,

breaker.execute(promise -> {  
            vertx.eventBus().<JsonObject>request(address, jsonObject, deliveryOptions)
                    .onComplete(event -> {

基于这一事件,我不想在重试时放弃。我试着检查事件状态,然后打电话给promise。完成方法,但断路器将其识别为故障并开始重试。我怎样才能告诉断路器停止重试?

我想断路器的物体可能

  1. 关闭它的方法
  2. 停止重试的方法
  3. 一种增加失效概率的方法

更新1---------------------

我自己实现了重试部分,对于超时操作,我可以设置计时器并检查操作状态,如果操作未完成,我可以启动重试逻辑。但我不知道如何在重试下一个操作之前取消该操作,例如,如何取消事件总线请求?

更新2-----------------

Vertx断路器也没有处理超时操作。在重试过程中,我可以从事件总线看到较旧的响应。如果处理不当,这可能会混淆应用程序逻辑。

共有1个答案

笪栋
2023-03-14

Vert目前不支持这一点。x断路器API。这里有一个悬而未决的问题。还有一家公关公司试图解决这个问题,但它已经搁置了一年。不知道为什么它从未被审查过。

 类似资料:
  • 问题内容: 我正在编写一个小的AngularJS应用,该应用具有登录视图和主视图,其配置如下: 我的LoginController检查用户/密码组合,并在$ rootScope上设置一个属性,以反映此情况: 一切正常,但是如果我访问,最终将绕过登录屏幕。我想写一些类似的内容,“每当路由更改时,如果$ rootScope.loggedUser为null,则重定向到/ login” … …等等。我可以

  • sql如果有重复数据,怎么根据需要去重,比如no相同,优先保留code为b的 五条数据四条code a 一条code b 其中code b的no和code a重复了,最后应该是四条数据,其中三条code a一条code b

  • 问题内容: 我有一个名为@status的变量,该变量在此select语句之前设置: 我只想选择if列,否则我想为shipwith选择null。我该如何完成? 问题答案:

  • 问题内容: 我有一个要点词典,说: 我想创建一个新字典,其中所有x和y值均小于5的点,即点“ a”,“ b”和“ d”。 根据这本书,每个字典都有该函数,该函数返回一个 元组列表: 所以我写了这个: 有没有更优雅的方式?我期待Python具有一些超棒的功能… 问题答案: 如今,在Python 2.7及更高版本中,您可以使用dict理解: 在Python 3中:

  • 我试图利用Spring重试的重试和断路器机制。我试图在一个特定的函数中使用两个注释(@retryable和@circuitbreaker),但是Circuit Breaker不起作用。 另外,请告知是否有更好的方法来实现重试和断路器。PS:我既不想使用resilience4j也不想使用RetryTemplate。

  • 问题内容: 我的应用程序中有2个过滤器。根据某些条件,我想选择是否执行第二个过滤器。有没有办法做到这一点? 我做了一些谷歌搜索,但没有成功。我希望请求继续执行而不执行第二个过滤器。那可能吗? 任何帮助将不胜感激。 问题答案: 您可以在请求中设置一个属性,然后在第二个过滤器中对其进行检查。 您可以像这样简化上面的代码: 这样,您只需检查属性“ executeSecondFilter”的存在