Error handling 驼峰:延迟ActiveMQ消息,直到错误条件得到解决

Error handling 驼峰:延迟ActiveMQ消息,直到错误条件得到解决,error-handling,apache-camel,activemq,Error Handling,Apache Camel,Activemq,我已经在驼峰路由中实现了一个服务,该服务使用ActiveMQ队列中的消息,进行一些处理并将它们发送到外部系统 如果调用外部系统时出现问题,则必须将消息ID通知回调用后端系统。由于必须维护消息顺序,因此服务需要延迟已经排队的消息和后续消息,直到错误条件得到解决 事实上,失败的消息必须从队列中删除,因为它已被处理,所以失败了。这可能与骆驼的重新运送有所不同 后端系统应控制进一步的过程。要么它再次发送有问题的消息,然后服务应该处理这条消息(由其ID标识),然后继续处理延迟的消息。或者后端发送一些延续信

我已经在驼峰路由中实现了一个服务,该服务使用ActiveMQ队列中的消息,进行一些处理并将它们发送到外部系统

如果调用外部系统时出现问题,则必须将消息ID通知回调用后端系统。由于必须维护消息顺序,因此服务需要延迟已经排队的消息和后续消息,直到错误条件得到解决

事实上,失败的消息必须从队列中删除,因为它已被处理,所以失败了。这可能与骆驼的重新运送有所不同

后端系统应控制进一步的过程。要么它再次发送有问题的消息,然后服务应该处理这条消息(由其ID标识),然后继续处理延迟的消息。或者后端发送一些延续信号,指示服务继续处理延迟的消息,尽管失败的消息没有再次出现。这两个选项都解决了错误情况

到目前为止,我已经考虑过实现一些基于驼峰的切换,涉及多个队列,路由决定是否可以直接处理传入消息,或者是否有延迟消息要处理。但我不知道是否有一些EIP以一种简洁的方式描述了这个场景


你能给我一些关于骆驼式方法的建议吗?

也许你可以使用重排序器EIP对失败的重试交换设置一些优先级:。

你所描述的听起来像(至少对我来说)一个精心安排的工作流而不是一个单一的EIP——b/c你描述的是跨多个步骤维护状态的需要。这完全可以通过事件驱动系统来实现,但当试图强制它使用一个队列解决方案和单个EIP时,通常会变得脆弱


多队列/多驼峰路由方法将是直接的,不需要任何不自然的行为(停止路由、重新排队等)来维护消息顺序等。

据我所知,重新排序器不适合我的特定问题。当进入失败状态时,输入队列可能会增加未知数量的传入消息。重新排序器等待大小受限的批处理或超时。也许几天后后端会发送一个延续信号。不允许传递顺序错误的消息。