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



我想知道是否有办法告诉 Camel 执行/最好是路由或某些处理,允许我仅在所有重试都用尽后发送到路由。我需要能够在失败时发送警报,但我不想仅仅因为路由重试 5 次并失败而发送 5 个警报。

谢谢 保罗

您可以使用配置了重新传递策略的错误处理程序。它的工作方式是您在路由或 CamelContext 中引用错误处理程序。如果使用死信通道,则可以重试五次,然后将消息发送到将消息存储在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。

最新更新