Mule中的ActiveMQ负载平衡

Mule中的ActiveMQ负载平衡,activemq,messaging,mule,Activemq,Messaging,Mule,我对使用Mule的ActiveMQ负载平衡有问题。我正在使用Mule 3.2.0和ActiveMQ 5.5.1 我有一个Mule-FLow应用程序,它使用JMS入站端点侦听ActiveMQ中的队列。 我有两个运行AMQ的实例,每个实例都有一个名为“MyQueue”的队列。 让我们将它们命名为AMQ1和AMQ2。 我还运行了2个mule实例,每个实例都有相同的应用程序。让我们给他们起名叫Mule1和Mule2 现在,我希望每个mule实例从任意一个AMQ队列中提取消息。因此,假设消息发送方将消息发

我对使用Mule的ActiveMQ负载平衡有问题。我正在使用Mule 3.2.0和ActiveMQ 5.5.1

我有一个Mule-FLow应用程序,它使用JMS入站端点侦听ActiveMQ中的队列。 我有两个运行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>

请注意,clientId对于不同的Mule实例是不同的。目前,AMQ 1和Mule1共享同一台机器,AMQ2和Mule2共享另一台机器

然而,我注意到soem的随机行为。有时,所有使用者(Mule1和Mule2)只注册到一个AMQ实例。有时,Mule1仅向AMQ1注册,Mule 2向AMQ2注册。 理想情况下,我希望Mule1和Mule2的余数同时注册到AM1和AMQ2 我按照这里的指示做了

基本上,我希望使用代理体系结构的网络,这样无论Mule实例或AMQ实例发生故障还是必须重新启动,都不会丢失服务。 不确定本例中的帮助中的randomize=true查询参数

有人能建议如何使用Mule 3.2.0和Active MQ 5.5.1实现上述目标吗

如果没有解决方案,我可能不得不让Mule1只听AMQ1,Mule2只听AMQ2,这样它就不会真正群集:(

提前谢谢。

让它工作起来了。 得到了一个关于骡子论坛本身的建议

因此,基本上,我没有为消费者依赖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>
   ........

........

处理得很好!

添加此链接我发现如果有帮助的话。但是仍然不能回答上面提到的随机行为。有一个未解决的jira请求,如下所示。仍然在寻求Mule/ActiveMQ专家的帮助这看起来不像是Mule问题。您看到了吗:?如果Mule1连接到一个服务器,为什么您说它不是群集的MQ1和Mule2连接到AMQ2?代理网络存在于AMQ1和AMQ2之间,独立于使用者,因此是群集的。您可以使用AMQ1-failover-AMQ2让Mule1和使用AMQ2-failover-AMQ1让Mule2群集化/HA。谢谢David。是的,我在我的Mule应用程序中使用相同的故障转移传输协议。我同意这可能不是一个I与Mule有关的问题以及与ActiveMQ有关的更多问题,但由于某些Mule用户可能遇到相同的问题,因此对其进行了标记。是的,它将被群集化,但仅适用于可以向AMQ1或AMQ2发送请求的消息生产者。但对于Mule中的消费者,他们只侦听一个AMQ实例。在这种情况下,如果说一个Mule实例(Mule2)发生故障或出现一些问题,发送到AMQ2的所有消息都不会被拾取。如果1个AMQ(例如AMQ2)发生故障,则Mule2将完全未使用。同样,对于Mule1 amq1-failover-AMQ2,如果amq1发生故障,则发送到Mule1的AMQ2将成为主消息,即使amq1已备份,也将仍然保持主消息。因此,您可能会遇到Mule1和Mule2都是主消息的情况只与amq1通话,而发送到amq2的消息根本没有被接收到。虽然可以使用AMQ 5.6中的priorityBackup,它总是尝试重新连接到本地备份或优先级备份,但是不确定这是否会对服务产生影响。此外,我们使用5.5.1,是的,我们可能需要升级到5.6,但是st正在努力避免这种情况。顺便说一句,我们在这里找到了优先备份信息。。