【问题标题】:Multiple servers to interact with a Rabbit MQ多个服务器与 Rabbit MQ 交互
【发布时间】:2014-04-25 06:40:28
【问题描述】:

我在一家公司工作,我们正在考虑使用 Mule ESB。我们需要在集群配置中设置 Mule,以获得 Mule 所创造的 Mule 高可用性 (HA) 集群。

现在,我们需要将传入的消息保存到队列中,以防断电或磁盘故障。据我了解,我们可以使用默认的 Mule 对象存储,它将消息“持久化”到共享内存网格。但是,我的第一个想法是,如果断电导致整个集群停止运行,这将不会有任何好处。

我们的另一个选择是使用单独的队列产品,例如 RabbitMQ 或 ActiveMQ。但是,这些可以与 HA 集群集成吗?这些产品中是否有任何机制可以确保两台机器不会同时接收到相同的消息?

考虑这种情况(基于观察者模式):

  1. Mule 收到一条消息,将其放入队列并以 OK 响应 发送给传递消息的客户端。
  2. Mule 从队列中取出一条消息,并尝试将其传递给订阅者。
  3. 订阅者接受消息,Mule 将其从队列中移除。

如果 HA 集群中的另一个 Mule 实例尝试接收上述 2 和 3 之间的消息,会发生什么情况?是否有一种机制,Mule 可以指示从队列中提取消息以“尝试传递”,但是如果传递失败,如果传递失败,则将队列上的消息更新为“未传递”?

【问题讨论】:

    标签: rabbitmq mule high-availability


    【解决方案1】:

    RabbitMQ 和 ActiveMQ 都会为您提供我认为您正在寻找的一次性功能。

    两个平台都确保队列中的每条消息仅由一个订阅者接收。

    在 ActiveMQ 中,要在发生故障时将消息返回到队列,您可以使用显式消息确认或 JMS 事务。这是quick overview

    在 RabbitMQ 中,您可以使用 acknowledgements 来执行此操作。

    此外,您可能需要考虑消息代理的可靠性。 ActiveMQ 和 RabbitMQ 都提供高度可用的代理配置选项。

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      相关资源
      最近更新 更多