用于异步通道和死信通道的断路器



我需要使用断路器和死信通道(DLC(。出错的消息应该发送到DLC。电路开路时,不应消耗其他信息。现在我已经实现如下:

public void configure() throws Exception {
// @formatter:off
int threshold = 2;
long failureWindow = 30000;
long halfOpenAfter = 120000;
RoutePolicy routePolicy = 
new ThrottlingExceptionRoutePolicy(threshold, failureWindow, halfOpenAfter, null);
errorHandler(deadLetterChannel("seda:errorQueue").
useOriginalMessage().maximumRedeliveries(3).redeliveryDelay(1000));

from("timer://myTimer?period=5s")
.routeId("InputFolderToTestSedaRoute")
.setBody(exchangeProperty(Exchange.TIMER_FIRED_TIME))
.convertBodyTo(String.class)
.to("seda://testSeda")
.log("**** Input data published to  testSeda - ${body}***** :")
;
from("seda://testSeda")
.routeId("TestSedaToOutputFolderRoute")
.routePolicy(routePolicy)
.to("file://{{outputFolder}}?autoCreate=false&fileName=TimerFile-${exchangeProperty.CamelTimerCounter}")
;
//Error Handling route!
from("seda:errorQueue")
.routeId("ErrorHandlingRoute")
.log("***** error body: ${body} *****")
.to("file://{{errorFolder}}?fileName=TimerFile-${exchangeProperty.CamelTimerCounter}.txt")
.log("***** Exception Caught: ${exception} *****")
;
// @formatter:on
}

问题是,如果启用DLC,这将无法按预期工作。但如果我评论以";CCD_ 1";它将工作-意味着上面的代码将只与默认的错误处理程序一起工作。

我的问题是-我希望错误消息进入错误队列,我希望断路器启用。有办法吗?非常感谢您抽出时间。

我解决了这个问题。我只是添加了以下内容,而不是DLC:

onException(GenericFileOperationFailedException.class).handled(false).to("seda:errorQueue");

这解决了问题。

最新更新