【问题标题】:Camel: defer ActiveMQ messages until error condition gets resolvedCamel:延迟 ActiveMQ 消息,直到错误情况得到解决
【发布时间】:2016-03-22 04:20:10
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: error-handling apache-camel activemq


    【解决方案1】:

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

    多队列/多 Camel 路由方法很简单,不需要任何不自然的行为(停止路由、重新排队等)来维护消息顺序等。

    【讨论】:

      【解决方案2】:

      也许您可以使用 Resequencer EIP 为失败的重试交换设置一些优先级:http://camel.apache.org/resequencer.html

      【讨论】:

      • 据我了解 Resequencer,它不是我特定问题的选择。当进入失败状态时,输入队列可能会增加未知数量的传入消息。 Resequencer 等待大小有限的批处理或超时。也许几天后后端会发送一个继续信号。不允许发送乱序消息。
      猜你喜欢
      • 1970-01-01
      • 2016-06-20
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多