我有驼峰路线,在例外情况下使用控制总线暂停路线。
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
,它调用一个控制总线处理器暂停路由,但它仍然调用简单的处理器来重新传递信息。
如果路由被暂停,为什么还要调用简单的处理器,如果不等到路由恢复呢?
答案 0 :(得分:0)
我怀疑重新开始是在.process(simpleProcessor
处的失败点开始的。但是,如果您只想暂停路线,为什么不只是添加.onException(Exception.class).to("controlBusProcessor")
答案 1 :(得分:0)
在暂停之前,路线不会完成其正在进行的消息。在自定义重新传递处理器中,您可以通过在Exchange.STOP=true
交换机上设置属性来标记交换以停止继续路由。
了解StopProcessor
如何做到:https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/processor/StopProcessor.java