使用XA的Camel,仅在所有重试耗尽后执行路由或进程

时间:2017-11-16 10:11:36

标签: exception-handling apache-camel jms xa

我想知道是否有办法告诉camel执行/最好是路由或某些处理,只有在所有重试都用尽后才允许我发送到路由。当事情发生故障时我需要能够发出警报,但我不想仅仅因为一条路线重试5次而失败就发出5个警报。

感谢 保罗

1 个答案:

答案 0 :(得分:0)

您可以使用配置了RedeliveryPolicy的ErrorHandler。它的工作方式是在路由或CamelContext中引用ErrorHandler。如果您使用死信通道,您可以重试五次,然后将消息发送到另一条路径,该路径将消息存储在JMS队列中。

<bean id="redeliveryPolicyConfig" class="org.apache.camel.processor.RedeliveryPolicy">
    <property name="maximumRedeliveries" value="5"/>
</bean>  

<bean id="errorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
   <property name="deadLetterUri" value="direct:myErrorRoute"/>
   <property name="redeliveryPolicy" ref="redeliveryPolicyConfig"/>
</bean>

<camelContext errorHandlerRef="errorHandler">
    ...
</camelContext>

上面的示例将在将消息发送到direct:myErrorRoute路由之前重试上下文中的所有路由,例如,您可以记录失败的消息以及异常和堆栈跟踪和/或发送消息到DeadLetterQueue。