gpt4 book ai didi

java - Apache Camel 聚合路由异常

转载 作者:搜寻专家 更新时间:2023-11-01 00:58:38 24 4
gpt4 key购买 nike

我想将 Apache Camel 并行多播用于 3 条路由并聚合(并等待)其中 2 条,同时让第 3 条自行进行(第 3 条不应阻塞前两条)。我还需要在“所有”情况下处理这两个,这意味着如果其中一个失败(例如,在处理过程中抛出异常),它也应该被聚合。

根据我从 Camel 文档中了解到的情况,只要您不指定 stopOnException,该行为就应该是“默认的”。但是发生的是异常交换永远不会进入我的聚合策略。有点奇怪的是,即使有 completionSize(2),聚合后面的处理器也会被执行。

所以我的问题是:聚合后的路由怎么可能在 AggregationStrategy 中不处理交换而继续进行?以及如何正确解决我的案子?请注意,执行 .to("direct:sync") 不是这种情况,因为此异常可能会从完全超出路由的多播聚合部分的路由中抛出。

这里是示例代码(ExceptionThrowingProcessor抛出MyException,PropertySetterProcessor不重要):

CamelContext context = new DefaultCamelContext();
RouteBuilder builder = new RouteBuilder() {
@Override
public void configure() throws Exception {
}
};

builder.onException(MyException.class)
.process(new PropertySetterProcessor("a", "onException"))
.handled(true);

builder.from("direct:input")
.process(new PropertySetterProcessor("a", "before-multicast"))
.multicast()
.parallelProcessing()
.shareUnitOfWork()
.to("direct:part1", "direct:part2", "direct:part3")

builder.from("direct:part1")
.process(new PropertySetterProcessor("a", "part1"))
.to("direct:sync");

builder.from("direct:part2")
.process(new PropertySetterProcessor("a", "part2"))
.process(new ExceptionThrowingProcessor("oops")) // throws MyException
.to("direct:sync");

builder.from("direct:part3")
.process(new PropertySetterProcessor("a", "part3"));
// don't want this to be aggregated within direct:sync

builder.from("direct:sync")
.aggregate(new TestAggregationStrategy())
// strategy.aggregate is called only once (from part1) but not from part2 :(
.constant(true)
.completionSize(2)
.process(new PropertySetterProcessor("a", "after-aggregation"));

context.addRoutes(builder);
context.start();

ProducerTemplate template = context.createProducerTemplate();
template.send("direct:input", new DefaultExchange(context, ExchangePattern.InOut));

最佳答案

将 onException block 上的 handled(true) 替换为 continue(true)。请参阅此以获取更多信息 http://camel.apache.org/exception-clause.html

关于java - Apache Camel 聚合路由异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com