1

Mule での ActiveMQ 負荷分散に問題があります。Mule 3.2.0 と ActiveMQ 5.5.1 を使用しています

JMS インバウンド エンドポイントを使用して ActiveMQ のキューをリッスンする Mule FLow アプリケーションがあります。AMQ の 2 つのインスタンスが実行されており、それぞれに「MyQueue」というキューがあります。それらに AMQ1 と AMQ2 という名前を付けましょう。また、2 つのミュール インスタンスを実行しています。それぞれが同じアプリを持っています。それらに Mule1 と Mule2 という名前を付けましょう。

次に、各ミュール インスタンスがいずれかの AMQ キューからメッセージを取得するようにします。したがって、メッセージ送信者が AMQ1 または AMQ2 のキュー MyQueue にメッセージを送信するとします (メッセージ送信者は、ActiveMQ でサポートされているフェイルオーバー トランスポートを使用して負荷を分散し、そのビットは正常に動作します)。AMQ1 に到達したとします。理想的には、Mule1 と Mule2 のそれぞれに 10 個のコンシューマーを各 AMQ インスタンスに登録したいと考えています。したがって、どちらも両方のキューで着信メッセージをリッスンしています。そのうちの 1 人がキューからメッセージを取得して処理する必要があります。

これは、両方の AMQ ブローカーに接続するために Mule で使用している構成です。

  <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 のランダムな動作に気づいています。AT では、すべてのコンシューマー (Mule1 と Mule2 の両方) が 1 つの AMQ インスタンスにのみ登録されます。Mule1 は AMQ1 にのみ登録し、Mule 2 は AMQ2 に登録する場合があります。理想的には、Mule1 と Mule2 の両方の cosnumer を 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

動作しました。Mule フォーラム自体に提案がありました。

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

したがって、基本的には、コンシューマの AMQ ロード バランシングに依存する代わりに、2 つの AMQ コネクタを使用し、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>

次に、composite-source を使用してフロー内から参照します

  <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 に答える