2017-10-23 14 views
0

JMSを使用してメッセージをキューに入れています。JMSロードバランシング(1キュー、2キュー接続ファクトリー、1バインディング)

キューは、2つのQueueConnectionファクトリと2つのキューマネージャにリンクされています。 メッセージをキューに送信する際に、2つの異なるキュー接続ファクトリを介して2つの異なるキューマネージャに均等にメッセージを配信/送信したいと考えています。

例:時間の異なる時点で

、 私のサービスは、いくつかのuser.Iからのメッセージが均等に2 QCF/QueueManagersにメッセージを配置する必要があり受け取ります。

私は1st QCF1/Queue Managerに送信する必要があり、別のmsgが私のサービスに到着した場合は、2番目のQCF1/Queue Managerに送信する必要があります。

JMSを使用すると、一度に1つのQCFのヘルプを使用してQueue Coontionを作成できます。

これはJMSを使用して達成できますか?これを達成するための他の方法ですか? 1 QCFを使用してキューにメッセージを送信するために

アプローチ:

import javax.naming.InitialContext; 
import javax.jms.Queue; 
import javax.jms.Session; 
import javax.jms.TextMessage; 
import javax.jms.QueueSession; 
import javax.jms.QueueSender; 
import javax.jms.QueueConnection; 
import javax.jms.QueueConnectionFactory; 

public class Receiver 
{ 
    @Resource(lookup = "jms/ConnectionFactory1") 
    private static QueueConnectionFactory connectionFactory1; 

    @Resource(lookup = "jms/ConnectionFactory2") 
    private static QueueConnectionFactory connectionFactory2; 

    @Resource(lookup = "jms/Queue") 
    private static Queue queue; 

    public void readQueueMessages() {                 
     try { 
      // create a queue connection 
      QueueConnection queueConn = connectionFactory1.createQueueConnection(); 

      // create a queue session 
      QueueSession queueSession = queueConn.createQueueSession(true, 0); 

      // create a queue receiver 
      QueueSender queueSender = queueSession.createSender(queue); 

      TextMessage msg = queueSession.createTextMessage(); 

      // start the connection 
      queueConn.start(); 

      msg.setText("Hi"); 
      queueSender.send(msg); 

      queueSender.close(); 
      queueSession.close(); 
      queueConn.close(); 

      } 
     } catch(JMSException exp) { 
      // Handle this exception 
     } finally {  
      if(queueConn != null) {              
       // close the queue connection 
       queueConn.close(); 
      } 
     } 
    } 
} 

答えて

1

負荷分散について言及しているので、代わりにメッセージを配布するために独自のコードを使用してのIBM MQキューマネージャのクラスタリングを使用する方が良いだろう。キュー・マネージャーをMQクラスターに入れ、QM1とQM2にクラスター・キューのインスタンスを定義する必要があります。以下のようにします。

CLUSQ1宛てのメッセージがQMゲートウェイに到着すると、キュー・マネージャーは、デフォルト・ラウンドロビン方式を使用して、メッセージをクラスター内の他のキュー・マネージャーにルーティングします。

読むhere MQクラスタリング

enter image description here

の詳細について
関連する問題