我需要将断路器与死信通道 (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,这将无法按预期工作。但是,如果我注释以“”开头的行errorHandler(deadLetterChannel()
,它将起作用 - 意味着上述代码仅适用于默认错误处理程序。
我的问题是 - 我希望错误消息进入错误队列并且我希望启用断路器。有什么办法吗?非常感谢您的宝贵时间。