如何在Camel Route中基于JMSXDeliveryCount实现条件处理逻辑
没问题,我帮你补全这个错误处理路由的逻辑,完美匹配你需要的JMS重试次数判断需求:
<routeContext id="inbound-errorhandler-route" xmlns="http://camel.apache.org/schema/spring"> <route id="errorhandler"> <from uri="direct:inboundErrorHandler" id="errorHandlerDirect"/> <choice> <!-- 当JMSXDeliveryCount小于5时,执行回滚 --> <when> <simple>${header.JMSXDeliveryCount} < 5</simple> <rollback markRollbackOnly="true"/> </when> <!-- 当JMSXDeliveryCount大于等于5时,记录日志并结束处理 --> <otherwise> <log message="消息重试次数已达上限(${header.JMSXDeliveryCount}次),停止处理" loggingLevel="WARN"/> <!-- 使用stop()结束路由处理,避免继续传递 --> <stop/> </otherwise> </choice> </route> </routeContext>
关键细节说明:
- Simple表达式:
${header.JMSXDeliveryCount} < 5用来判断消息的重试次数,注意XML中必须把小于号转义为<,否则会导致XML解析错误 - 回滚操作:
<rollback markRollbackOnly="true"/>会标记事务回滚,让消息重新回到JMS队列(如果是事务型消费者的话),触发下一次重试。如果不需要保留事务上下文,可以去掉markRollbackOnly属性,但通常JMS场景下推荐保留 - 终止处理:当重试次数≥5时,用
<stop/>直接终止路由流程,避免消息继续向下传递,同时打印WARN级别的日志,方便后续排查问题 - 日志变量:
${header.JMSXDeliveryCount}会把当前的重试次数插入到日志中,让日志信息更直观
内容的提问来源于stack exchange,提问作者DevelopingDeveloper
相关产品推荐
相关产品推荐

