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

时间:2015-03-10 15:19:45

标签: mule reliability cloudhub

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

  1. 详细说明上面的链接,我观察到当我的“应用程序逻辑流程”中抛出异常,并且我已经使流程事务处理时,消息被放回到VM队列中。然而,所有发生的事情都是消息然后重复从队列中取出,由流处理,然后再次抛出异常 - 无限广告。似乎没有办法在VM队列上配置任何类型的重试延迟或最大重试次数,例如,使用ActiveMQ。我想出的最好的工作是用http-request范围包围until-successful消息处理器,但我宁愿让这些事情适用于我的整个流程(无需包装整个流程until-successful)。这种事情是否只能使用VM队列和CloudHub?
  2. 我已将until-successful配置为将消息放在另一个我想用作死信队列的VM队列上。再次,这可以正常工作,我可以登录到CloudHub并查看我的DLQ上填充的消息 - 但是当端点恢复时,它似乎无法将来自此队列的消息移回流中。似乎你可以在CloudHub中做的就是清除你的队列。同样,这是否可以仅使用VM队列和CloudHub(即没有其他排队工具)?

1 个答案:

答案 0 :(得分:1)

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

  1. VM队列无法延迟重新传递(如指数退避)。如果需要此类功能,请使用JMS队列。
  2. 您需要创建一个用于处理DLQ的流,例如,通过请求者模块定期使用队列并重新将消息注入主队列的流。再次,使用JMS,您可以更好地控制。
  3. 除了JMS之外,您还可以考虑使用CloudAMQP,Iron.io或AWS SQS等托管队列。您将失去对入站端点的事务支持,但可以更好地控制(重新)传递行为。