首页 > 解决方案 > Apache Camel JMS 异常循环

问题描述

camelVersion = "2.19.1"
springVersion = "4.1.5.RELEASE"
jdk = "1.8"

正在使用 Apache Camel JMS、XA 事务 (atomikos) 和 Java/Spring。添加了一些代码来处理骆驼路由和业务逻辑处理期间可能发生的异常,即使用 onException。下面是我们遇到问题之前的实际代码,在发生异常后,onException 代码会像按照指定的数字重试一样处理它;将控件发送到错误处理程序,然后继续循环并一次又一次地处理相同的消息,并在发生异常和重试失败时执行相同的操作。

onException(Exception.class)
.log("Exception caught")
.redeliveryDelay(redliveryDelay) //delay time
.setHeader("exception", simple("${exception}"))
.maximumRedeliveries(redelivery) //number of retries                
.process("errorHandler");

标签: javaexceptionapache-cameljms

解决方案


经过一番研究;inOnly 和 inOut 概念有助于提出以下解决方案来第一次获取队列的消息,即如果发生异常并且重试也失败了。

onException(Exception.class)
.log("Exception caught")
.redeliveryDelay(redliveryDelay)
.setHeader("exception", simple("${exception}"))
.maximumRedeliveries(redelivery)                    
.process("errorHandler")
.handled(true)
.inOnly();

推荐阅读