如何配置Camel的RedeliveryPolicy retriesExhaustedLogLevel?

时间:2014-12-24 16:20:02

标签: java error-handling apache-camel dead-letter

我在Camel路由中设置了一个errorHandler,它会在将消息发送到死信通道(在本例中为activemq队列)之前多次重试一条消息。我想要的是当消息未能重试最多次并且然后被发送到死信队列时看到ERROR日志。

查看错误处理和死信通道的文档,似乎RedeliveryPolicy上有两个选项:retriesAttemptedLogLevel和retriesExhaustedLogLevel。据说默认情况下,retriesExhaustedLogLevel已经设置为LoggingLevel.ERROR,但是当它已经耗费所有重试并将消息路由到死信通道时,它似乎没有实际记录任何内容。

这是我通过Java DSL的errorHandler定义。

.errorHandler(this.deadLetterChannel(MY_ACTIVE_MQ_DEAD_LETTER)
    .useOriginalMessage()
    .maximumRedeliveries(3)
    .useExponentialBackOff()
    .retriesExhaustedLogLevel(LoggingLevel.ERROR)
    .retryAttemptedLogLevel(LoggingLevel.WARN))

我现在已经明确地将级别设置为ERROR,但它似乎仍然没有注销任何内容(对任何日志记录级别)。另一方面,retryAttemptedLogLevel正常工作并将登录到相应的LoggingLevel(即,我可以将retryAttemptedLogLevel设置为LoggingLevel.ERROR并将重试视为ERROR日志)。但是,我只想在耗尽时使用单个ERROR日志,而不是在后续重试可能成功时每次重试的ERROR日志。

也许我遗漏了一些东西,但似乎retriesExhaustedLogLevel没有做任何事情......或者如果将ErrorHandler配置为DeadLetterChannel则不记录任何内容。是否存在我仍然需要的配置,或者RedeliveryPolicy的此功能是否未针对此特定ErrorHandlerFactory执行?

我还可以设置一条路由来发送我用尽的消息,这些消息只是记录并路由到我的死信通道,但我更愿意尝试使用已经内置在ErrorHandler中的内容。

1 个答案:

答案 0 :(得分:0)

将ErrorHandler的DeadLetterChannel更新为直接端点。留下2 logLevel配置相同。我得到了3次重试尝试的WARN日志,但没有错误日志告诉我重试已经用完了。但是,我确实设置了一条小路,收听记录的直接死信端点,这是有效的。

不能直接解决我希望ERROR日志用于耗尽的愿望,但现在是一种可接受的解决方法。