1

我在使用 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,它不会真正被集群:(

提前致谢。

4

1 回答 1

2

得到它的工作。得到了骡子论坛本身的建议。

http://forum.mulesoft.org/mulesoft/topics/activemq_loadbalancing_with_mule

所以基本上我没有为消费者依赖 AMQ 负载平衡,而是使用了 2 个 AMQ 连接器,并在每个 mule 应用程序中使用了一个复合源来监听 2 个入站端点。它是一种享受。启动/关闭 Mule 和 AMQ 实例 - 一切都很好。这是配置

      <jms:activemq-connector  name="Active_MQ_1"  brokerURL="failover:  (tcp://10.0.64.158:61616)"  eagerConsumer="true"  numberOfConsumers="10"  dynamicNotification="true"  validateConnections="true"  clientId="MuleInstance1"  doc:name="Active MQ">
       <reconnect count="5" frequency="3000" blocking="false"/>

     </jms:activemq-connector>
     <jms:activemq-connector  name="Active_MQ_2"  brokerURL="failover:(tcp://10.0.64.160:61616)"  eagerConsumer="true"  numberOfConsumers="10"  dynamicNotification="true"  validateConnections="true"  clientId="MuleInstance1"  doc:name="Active MQ">
     <reconnect count="5" frequency="3000" blocking="false"/>

      </jms:activemq-connector>

现在使用复合源从您的流程中引用它

  <flow name="MyAutomationFlow" doc:name="MyAutomationFlow">
      <composite-source>
          <jms:inbound-endpoint queue="MyOrderQ" connector-ref="Active_MQ1" doc:name="JMS Inbound Endpoint"/>
          <jms:inbound-endpoint queue="MyOrderQ" connector-ref="Active_MQ2" doc:name="JMS Inbound Endpoint"/>
      </composite-source>
   ........

工作了一个款待!

于 2012-08-28T15:59:45.423 回答