You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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} &lt; 5</simple>
                <rollback markRollbackOnly="true"/>
            </when>
            <!-- 当JMSXDeliveryCount大于等于5时,记录日志并结束处理 -->
            <otherwise>
                <log message="消息重试次数已达上限(${header.JMSXDeliveryCount}次),停止处理" loggingLevel="WARN"/>
                <!-- 使用stop()结束路由处理,避免继续传递 -->
                <stop/>
            </otherwise>
        </choice>
    </route>
</routeContext>

关键细节说明:

  • Simple表达式:${header.JMSXDeliveryCount} &lt; 5 用来判断消息的重试次数,注意XML中必须把小于号转义为&lt;,否则会导致XML解析错误
  • 回滚操作:<rollback markRollbackOnly="true"/> 会标记事务回滚,让消息重新回到JMS队列(如果是事务型消费者的话),触发下一次重试。如果不需要保留事务上下文,可以去掉markRollbackOnly属性,但通常JMS场景下推荐保留
  • 终止处理:当重试次数≥5时,用<stop/>直接终止路由流程,避免消息继续向下传递,同时打印WARN级别的日志,方便后续排查问题
  • 日志变量:${header.JMSXDeliveryCount} 会把当前的重试次数插入到日志中,让日志信息更直观

内容的提问来源于stack exchange,提问作者DevelopingDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:31:02