在 onException 块中将 handled 设置为 true 可防止重新交付
Setting handled as true in onException block prevents redeliveries
我正在从目录中读取文件,并尝试根据文件中的数据调用 API。
在尝试处理异常时,我遇到了一个问题。我正在尝试将 onException 块配置为重新传送 3 次,延迟 5 秒。当我设置 handled(true)
时出现问题。此配置不重新投递,一出现异常就停止
这是我的 onException
区块:
onException(HttpOperationFailedException.class)
.log(LoggingLevel.ERROR, logger, "Error occurred while connecting to API for file ${header.CamelFileName} :: ${exception.message}")
.log("redelivery counter :: ${header.CamelRedeliveryCounter}")
.maximumRedeliveries(3)
.redeliveryDelay(5000)
.handled(true);
如何同时处理和重新投递?
除非您使用有问题的 Camel 版本,否则无论处理与否,都会按预期进行重新交付。
处理与不处理之间的唯一区别是,一旦重试次数耗尽,发送回客户端的结果将是异常(未处理)或 onException
(已处理)的结果).
你在这里的错误是,你假设你在你的 onException
中定义的日志 EIPs 在每次重试时被调用,而它们实际上只在重试用完时被调用。
如果您想在日志中查看重试次数,可以使用 retryAttemptedLogLevel
如下:
onException(HttpOperationFailedException.class)
.maximumRedeliveries(3)
.redeliveryDelay(5000)
.retryAttemptedLogLevel(LoggingLevel.WARN);
然后您将收到以下类型的警告消息:
Failed delivery for (MessageId: X on ExchangeId: Y). On delivery attempt: Z caught: ...
我正在从目录中读取文件,并尝试根据文件中的数据调用 API。
在尝试处理异常时,我遇到了一个问题。我正在尝试将 onException 块配置为重新传送 3 次,延迟 5 秒。当我设置 handled(true)
时出现问题。此配置不重新投递,一出现异常就停止
这是我的 onException
区块:
onException(HttpOperationFailedException.class)
.log(LoggingLevel.ERROR, logger, "Error occurred while connecting to API for file ${header.CamelFileName} :: ${exception.message}")
.log("redelivery counter :: ${header.CamelRedeliveryCounter}")
.maximumRedeliveries(3)
.redeliveryDelay(5000)
.handled(true);
如何同时处理和重新投递?
除非您使用有问题的 Camel 版本,否则无论处理与否,都会按预期进行重新交付。
处理与不处理之间的唯一区别是,一旦重试次数耗尽,发送回客户端的结果将是异常(未处理)或 onException
(已处理)的结果).
你在这里的错误是,你假设你在你的 onException
中定义的日志 EIPs 在每次重试时被调用,而它们实际上只在重试用完时被调用。
如果您想在日志中查看重试次数,可以使用 retryAttemptedLogLevel
如下:
onException(HttpOperationFailedException.class)
.maximumRedeliveries(3)
.redeliveryDelay(5000)
.retryAttemptedLogLevel(LoggingLevel.WARN);
然后您将收到以下类型的警告消息:
Failed delivery for (MessageId: X on ExchangeId: Y). On delivery attempt: Z caught: ...