Apache Camel 2.18.1.redhat-000021中CamelRedeliveryCounter不再增长是否为Bug?
我之前在社区讨论和Red Hat客户论坛里看到过其他用户遇到完全相同的问题——在这个特定的Red Hat定制Camel版本中,不管路由里设置的maximumRedeliveries值是多少,失败后只会重试两次,CamelRedeliveryCounter计数到2就不再增长。
结合用户反馈和实际排查经验,整理几个关键点供你参考:
1. 版本特殊性导致的已知Bug
这个Red Hat定制的2.18.1版本存在重投递计数器的已知问题,尤其是当路由同时使用JMS和HTTP组件时(从你的日志片段能看到CamelJmsDeliveryMode和HTTP请求异常)。Red Hat在后续的小版本更新(比如2.18.1.redhat-000030及以上)中修复了这个Bug,不少用户升级后问题直接解决。
2. 组件级重投递配置冲突
如果你的路由同时配置了JMS组件的重投递策略和Camel路由的maximumRedeliveries,两者很可能会相互干扰。比如JMS默认的重投递次数是1,加上Camel路由的1次重试,就会出现总共两次重试的情况,此时CamelRedeliveryCounter到2就会停止递增。
建议你检查JMS连接工厂的redeliveryPolicy配置,确保和路由的重投递策略一致;或者显式在路由中覆盖组件的默认配置,示例代码如下:
from("jms:queue:yourTargetQueue") .errorHandler(deadLetterChannel("jms:queue:deadLetterQueue") .maximumRedeliveries(5) // 设置你需要的重试次数 .redeliveryDelay(2000) .logRetryAttempted(true) .useOriginalMessage(true));
3. 日志参数的参考价值
从你提供的日志片段来看,CamelRedelivered = true说明消息已经被标记为重投递状态,结合CamelJmsDeliveryMode=2(持久化模式),大概率是JMS组件的重投递逻辑和Camel的全局重投递逻辑发生了冲突,导致计数器不再增长。
如果你暂时无法升级版本,可以尝试禁用JMS组件的自动重投递,完全交由Camel的错误处理器来控制重试逻辑。
内容的提问来源于stack exchange,提问作者Shoaib Khan

