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