Rabbitmq 多台服务器与Rabbit MQ交互

Rabbitmq 多台服务器与Rabbit MQ交互,rabbitmq,mule,high-availability,Rabbitmq,Mule,High Availability,我在一家考虑Mule ESB的公司工作。我们需要在集群配置中设置Mule,以获得Mule所拥有的Mule高可用性(HA)集群 现在,我们需要将传入消息持久化到队列中,以防断电或磁盘故障。据我所知,我们可以使用默认的Mule对象存储,它将消息“持久化”到共享内存网格。然而,我在这里的第一个想法是,如果停电导致整个集群停止运行,这将不会有任何好处 我们的另一个选择是使用单独的队列产品,如RabbitMQ或ActiveMQ。但是,这些是否可以与HA集群集成?这些产品中是否有任何机制可以确保两台机器不会

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

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

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

考虑这个场景(基于观察者模式):

  • Mule收到一条消息,将其放入队列中,并以OK响应 发送到传递消息的客户端
  • Mule从队列中拾取消息,并尝试将其传递给订阅者
  • 订阅者接受消息,Mule将其从队列中删除

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

    RabbitMQ和ActiveMQ都将为您提供我认为您需要的一次性功能

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

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

    在RabbitMQ中,可以使用

    也可以考虑消息代理的可靠性。ActiveMQ和RabbitMQ都提供高度可用的代理配置选项