我有一个在路由构建器中用Java定义的路由,如下所示:
from("jms:topic:trigger?maxConcurrentConsumers=1")
.autoStartup(true)
.beanRef("someProcessorBeen");
这已经好几年了。
但是,在某些情况下,我希望能够在java处理器bean中引发特定的“重试”异常,以便将相同的交换重新发送到Bean。
我曾尝试将&transacted=true
添加到'from'部分的JMS主题引用URI中,但是我刚从DefaultErrorHandler
收到一条错误日志消息,内容为“无法传递... ...”,当我抛出重试异常时。
我也尝试添加:
onException(MyRetryException.class).maximumRedeliveries(10);
在from
路由定义之前,但该路由似乎未创建,因为该路由未处理任何主题消息。
请注意,它们全部在OSGi环境中运行,并且ActiveMQ处理JMS内容。
更新:好的,我发现在路由生成器中添加以下内容可以满足我的需求:
RedeliveryPolicyDefinition redeliveryPolicy = new RedeliveryPolicyDefinition();
// Set redelivery policy so it retries every 5 seconds for 10 minutes,
// then log an error when the retries have been exhausted
redeliveryPolicy.maximumRedeliveries(120)
.redeliveryDelay(5000)
.logExhausted(true)
.retriesExhaustedLogLevel(LoggingLevel.ERROR);
onException(MyRetryException.class)
.setRedeliveryPolicy(redeliveryPolicy);
所以现在的问题是:这是实现这一目标的正确方法吗?