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

Apache骆驼断路器最初处于打开状态

洪鸿博
2023-03-14

我想试试阿帕奇骆驼断路器(http://camel.apache.org/load-balancer.html)模式。它不像我想的那样。

我的路线是这样的

from("direct:foo")
        .loadBalance()
        .circuitBreaker(1, 5000, HustException.class).to("direct:pleaseHoldTheLine")
        .to("direct:bar");

from("direct:bar")
        .process(exchange -> {
            Integer value = exchange.getIn().getBody(Integer.class);
            System.out.println("[BAR] " + value);
            if (value.equals(12)) {
                throw new HustException();
            }
        });

from("direct:pleaseHoldTheLine")
        .process(exchange -> {
            Integer value = exchange.getIn().getBody(Integer.class);
            System.out.println("[PLEASE_HOLD_THE_LINE] " + value);
        });

主应用程序每秒向foo路由发送整数值为0到99的消息。

在使用12的消息时,foo路由抛出一个执行命令,请保持线路路由应该介入。5秒钟后,foo路线再次被询问,如果没有异常发生,foo路线将再次被询问。

[PLEASE_HOLD_THE_LINE] 0
[PLEASE_HOLD_THE_LINE] 1
[PLEASE_HOLD_THE_LINE] 2
[PLEASE_HOLD_THE_LINE] 3
[PLEASE_HOLD_THE_LINE] 4
[PLEASE_HOLD_THE_LINE] 5
[PLEASE_HOLD_THE_LINE] 6
[PLEASE_HOLD_THE_LINE] 7
[PLEASE_HOLD_THE_LINE] 8
[PLEASE_HOLD_THE_LINE] 9
[PLEASE_HOLD_THE_LINE] 10
[PLEASE_HOLD_THE_LINE] 11
[PLEASE_HOLD_THE_LINE] 12
[PLEASE_HOLD_THE_LINE] 13
[PLEASE_HOLD_THE_LINE] 14
...

休伯特

共有1个答案

仇炜
2023-03-14

Apache Camel断路器负载平衡器不会重定向流,它只传递或拒绝消息。您在问题中使用的路线将始终向直接:请保留路线“路线发送消息。

如果删除。从“direct:foo”路由到(“direct:pleseholdtheline”),则断路器应按预期运行,并在收到消息12后拒绝消息。

要停止DefaultErrorHandler处理消息,您应该使用errorHandler(noErrorHandler())禁用路由的所有错误处理,或者可以使用全局OneException(HustException.class)指定要跳过的特定异常。续(真) 语句。

您可以使用故障切换负载平衡器重定向流,但我不清楚是否可以将故障切换断路器组合起来以获得所需的行为。

把这一切放在一起:

onException(HustException.class).continued(true);
from("direct:foo")
        .loadBalance()
        .circuitBreaker(1, 5000, HustException.class)
        .to("direct:bar");

 类似资料:
  • 我创建了一个路由器类,并在@Configuration中标记为@Bean。有一件事我不太确定,那就是camel会多久调用一次数据库以获取select结果?一旦我在数据库中有了一个新条目,camel就会检索并处理它。

  • 我有一个Springboot应用程序,其中配置了一些驼峰路线。 我想测试从到的路由。我试过这里提到的不同东西http://camel.apache.org/camel-test.html,但似乎无法让它工作。 我正在尝试这样做: 但是我的ProducerTemplate总是。我尝试了自动连接CamelContext,但遇到一个异常,它无法解析CamelContext。但这可以通过添加到类。但是我的

  • 我正在尝试从目录中选取一个文件,拆分一个文件,并将每一个拆分行添加到ActiveMQ中。我在这个过程中遇到了异常处理的问题。假设目录中的文件是一个二进制文件(可执行文件),那么splitter会显示org.apache.camel.runtimeCamelException和java.nio.charset.MalFormedInputException异常。如果出现这种情况,那么我需要捕获这些异

  • 看来我在路由之间共享信息时遇到了问题。 传递信息的骆驼模式是什么? 我查看了交易所属性,但我认为这在路线之间并没有停留...... 例如: 一个文件有一个文件有一些配置,我有一个路由来读取这个文件,还有几个其他路由将根据配置进行操作, 我该如何完成此操作? 我曾想过将值放入单例bean中,但这看起来有点难看。。。

  • 问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b

  • 我正在尝试Apache Camel技术,但遇到了麻烦。 我使用Jpa组件的轮询消费者as from(),并将实体上的@consumed注释设置为在流程结束时将其状态更改为“已成功处理”。它很好用。 但如果出现任何错误,我不想在数据库中设置“已成功处理”标志,而是设置“错误发生”之类的标志。 为了解决这个问题,我创建了一个带有处理器的“死信队列”,该处理器试图更改我正在进行的实体的状态,以便稍后保存