Camel:延迟 ActiveMQ 消息直到错误条件得到解决

Camel: defer ActiveMQ messages until error condition gets resolved

我在 Camel 路由中实现了一项服务,它使用来自 ActiveMQ 队列的消息,进行一些处理并将它们发送到外部系统。

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

事实上,失败的消息必须从队列中移除,因为它已经被处理,所以失败了。与 Camel 重新交付相比,这可能有所不同。

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

到目前为止,我已经考虑过实现某种涉及多个队列的基于 Camel 的切换,路由决定它是否可以直接处理传入消息,或者是否有延迟的消息要处理。但我不知道是否有一些 EIP 可以巧妙地描述这种情况。

你能给我一些驼峰式的建议吗?

也许您可以使用 Resequencer EIP 优先处理失败的重试交换:http://camel.apache.org/resequencer.html.

您所描述的内容听起来(至少对我而言)是精心策划的工作流程与单个 EIP——b/c您所描述的是跨多个步骤维护状态的需要。这完全可以通过事件驱动系统来完成,但是当试图强制它进入仅使用一个队列解决方案和单个 EIP 时通常会变得脆弱。

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