>我有骆驼路线,它在异常时使用控制总线暂停路线。
onException(Exception.class).maximumRedeliveries(1).onRedeliveryRef("controlBusProcessor");
from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.repeatCount=0")
.routeId("myRoute")
.process(simpleProcessor)
.to("stream:out")
路由最初调用一个引发Exception
的简单处理器,onException
有一个redeliveryRef
调用一个暂停路由的控制总线处理器,但它仍然调用简单处理器来重新传递消息。
如果路由暂停,为什么仍然调用简单处理器,难道不应该等到路由恢复吗?
否 路由将在暂停之前完成其飞行中消息。在自定义重新传送处理器中,可以通过将交换的属性设置为 Exchange.STOP=true
来标记交换以停止继续路由。
看看StopProcessor
是如何做到这一点的:https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/processor/StopProcessor.java
我怀疑重新交付从故障点开始,即.process(simpleProcessor
(。但是,如果您只想暂停路由,为什么不直接添加.onException(Exception.class).to("controlBusProcessor")