0

我需要将断路器与死信通道 (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(),它将起作用 - 意味着上述代码仅适用于默认错误处理程序。

我的问题是 - 我希望错误消息进入错误队列并且我希望启用断路器。有什么办法吗?非常感谢您的宝贵时间。

4

1 回答 1

0

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

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

这解决了这个问题。

于 2021-06-02T19:06:42.640 回答