我正在为一家我们正在考虑Mule ESB的公司工作。我们需要在群集配置中设置Mule,以获得Mule为Mule高可用性(HA)群集注入的内容。
现在,我们需要在传输中断或磁盘故障时将传入的消息保留到队列中。据我所知,我们可以使用默认的Mule对象存储,它将消息“持久化”到共享内存网格。但是,我在这里首先想到的是,如果我们停电导致整个集群无法运行,那就不会有任何好处。
我们的另一个选择是使用单独的队列产品,例如RabbitMQ或ActiveMQ。但是,这些与HA集群的集成是否正常?这些产品中是否有任何机制可确保两台机器不会同时接收相同的信息?
考虑这种情况(基于观察者模式):
如果HA群集中的另一个Mule实例尝试接收上面2到3之间的消息,会发生什么?是否存在一种机制,Mule可以指示从队列中拾取消息以“尝试传递”但是,如果传递失败,如果传递失败,则将队列上的消息更新为“未传递”?
答案 0 :(得分:1)
RabbitMQ和ActiveMQ都会为您提供我认为您正在寻找的一次又一次的功能。
两个平台都确保只有一个订阅者接收队列中的每条消息。
在ActiveMQ中,要在发生故障时将消息返回到队列,可以使用显式消息确认或JMS事务。这是quick overview。
在RabbitMQ中,您可以使用acknowledgements。
此外,您可能需要考虑邮件代理的可靠性。 ActiveMQ和RabbitMQ都提供了高度可用的代理配置选项。