我在使用 Mule 进行 ActiveMQ 负载平衡时遇到问题。我正在使用 Mule 3.2.0 和 ActiveMQ 5.5.1
我有一个 Mule FLow 应用程序,它使用 JMS 入站端点来监听 ActiveMQ 中的队列。我有 2 个 AMQ 实例运行,每个实例都有一个名为“MyQueue”的队列。让我们将它们命名为 AMQ1 和 AMQ2。我还运行了 2 个 mule 实例——每个实例都有相同的应用程序。我们将它们命名为 Mule1 和 Mule2。
现在我希望每个 mule 实例从任一 AMQ 队列中获取消息。所以说消息发送者将消息发送到 AMQ1 或 AMQ2 中的队列 MyQueue (消息发送者使用 ActiveMQ 支持的故障转移传输进行负载平衡 - 并且该位工作正常)。假设它达到了 AMQ1。现在理想情况下,我希望在每个 AMQ 实例中注册 Mule1 和 Mule2 各有 10 个消费者。所以他们俩都在监听两个队列中的传入消息。其中之一应该从队列中提取消息并进行处理。
这是我在 Mule 中用来连接两个 AMQ 代理的配置。
<jms:activemq-connector name="Active_MQ" brokerURL="failover:tcp://10.0.64.158:61616,tcp://10.0.64.160:61616)?randomize=true" eagerConsumer="true" numberOfConsumers="10" dynamicNotification="true" validateConnections="true" clientId="MuleInstance1" doc:name="Active MQ">
<reconnect count="5" frequency="3000" blocking="false"/>
</jms:activemq-connector>
请注意,对于不同的 Mule 实例,clientId 是不同的。目前 AMQ 1 和 Mule1 共享同一台机器,AMQ2 和 Mule2 共享另一台机器。
但是我注意到一些随机行为。有时,所有消费者(Mule1 和 Mule2)只注册到一个 AMQ 实例。有时 Mule1 仅注册到 AMQ1,而 Mule 2 注册到 AMQ2。理想情况下我想要的是 Mule1 和 Mule2 的 cosnumers 注册到 AM1 和 AMQ2 我按照这里的说明 http://www.mulesoft.org/documentation-3.2/display/MULE3USER/ActiveMQ+Integration
基本上我想使用代理架构的网络,这样无论 Mule 实例或 AMQ 实例出现故障还是必须重新启动,都不会丢失服务。在这种情况下,不确定randomize=true查询参数是否有帮助。
有人可以建议如何使用 Mule 3.2.0 和 Active MQ 5.5.1 实现上述目标吗?
遗憾的是,如果没有解决方案,我可能不得不让 Mule1 听 AMQ1,而 Mule2 只听 AMQ2,它不会真正被集群:(
提前致谢。