使用 VM 队列在 CloudHub 中实施可靠性模式

Implementing the reliability pattern in CloudHub with VM queues

我在我的 Mule 应用程序中或多或少地使用持久性 VM 队列 CloudHub 实现了可靠性模式,如文档所述 here。虽然一切正常,但它给我留下了一些关于实际确保可靠传递消息的问题。为了说明以下几点,假设我的 "application logic flow" 中有 http-request 组件(参见上面 link 上的图表)因为端点已关闭而抛出异常,我想确保飞行消息将最终传送到端点:

  1. 如上面 link 所述,我观察到当在我的 "application logic flow" 中抛出异常时,我已将流程设为事务性,消息将放回 VM 队列.然而,所有发生的事情都是消息然后重复地从队列中取出,由流处理,然后再次抛出异常 - 无穷无尽。似乎没有办法在 VM 队列上配置任何类型的重试延迟或最大重试次数,例如,使用 ActiveMQ。我想出的最好的解决方法是用 until-successful 范围包围 http-request 消息处理器,但我宁愿将这些事情应用于我的整个流程(不必包装until-successful 中的整个流程)。仅使用 VM 队列和 CloudHub 就可以实现这种事情吗?
  2. 我已将我的 until-successful 配置为将消息放在我想用作死信队列的另一个 VM 队列中。同样,这工作正常,我可以登录到 CloudHub 并查看我的 DLQ 上填充的消息 - 但它似乎无法提供在端点恢复时将消息从该队列移回流中的方法。您在 CloudHub 中所能做的似乎就是清空您的队列。同样,这是否可能仅使用 VM 队列和 CloudHub(即没有其他排队工具)?

无论您是否在 CloudHub 中使用它们,VM 队列都是非常基本的。

  1. VM 队列没有延迟重新传递的能力(如指数退避)。如果您需要此类功能,请使用 JMS 队列。
  2. 您需要创建一个流程来处理 DLQ,例如通过请求者模块定期使用队列并将消息重新注入主队列的流程。同样,使用 JMS,您将拥有更好的控制权。

除了 JMS,您可以考虑托管队列,例如 CloudAMQP、Iron.io 或 AWS SQS。您将失去对入站端点的事务支持,但会更好地控制(重新)交付行为。