在 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: ...