2016-11-21 14 views
0

私はローカルホスト上のアクティブなMQキューにメッセージを送信し、キューからメッセージを受け取ることができるASP.NET(C#)で書かれた簡単なテストサイトを持っていますローカルホスト上。私の質問は二重に折りたたまれています:aspx:アクティブなMQメッセージにメッセージセレクタを設定する

1)私のウェブサイトから特定のセレクター値を含むキューにメッセージを送信するにはどうしたらいいですか?私はこのようにキューに送信していたメッセージを作成する瞬間

IConnectionFactory factory = new NMSConnectionFactory("tcp://192.168.1.152:61616"); 
     IConnection connection = factory.CreateConnection(); 
     connection.Start(); 

     ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); 
     IDestination QueueDestination = SessionUtil.GetDestination(session, "Request"); 
     IMessageProducer messageProducer = session.CreateProducer(QueueDestination); 

     ITextMessage request = session.CreateTextMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ": " + tb_Request.Text.Trim()); 
     messageProducer.Send(request); 

2私のローカルホストActiveMQのキューにメッセージを作成するとき、どのように私は、メッセージにセレクタ値を追加します) ?

答えて

0

メッセージセレクタ:-)事前に

おかげで、アクティブ、彼らが受け取るメッセージをフィルタリングするために消費者のための方法(サブスクリプション)です。メッセージの送信時にセレクタを設定したり、何もしません。キューに送信し、コンシューマにメッセージに一致するセレクタがある場合、そのコンシューマにディスパッチされます。それ以外の場合は、別のコンシューマがメッセージを読み込んで確認するまで、メッセージはキューに残ります。いくつかの文書はhereです。

詳細については、GoogleのJMSメッセージセレクタで検索してください。

+0

:-)コメントをお気軽に、そして私が見てきた他の人が、あなたは、キー/値のペアとして、消費者の選択を与える必要があります。私が難しかったのは、このキーと値のペアをメッセージに入れる場所です。 メッセージのどこでどのようにセレクタのキーと値のペアを配置する必要があるのですか? – SorenA

+0

あなたのオリジナルの質問は、あなたが今質問しているようには反映されていません。 –

+0

私の質問が不明確であれば謝罪します。それをより明確にする時間をとってくれてありがとう。 – SorenA

0

私はそれを理解することができ、他の人が見る/コメントするためにここで私の発見を共有すると思った。

まず私はOperatorRequestObjectクラスを作成しました:

public class OperatorRequestObject 
{ 
    string shortcode; 

    public string Shortcode { 
     get { return shortcode; } 
     set { shortcode = value; } 
    } 
} 

私はこのコードを使用するキューに送信するメッセージを作成する場合:

OperatorRequestObject OperatorRequestObject = new OperatorRequestObject(); 
     OperatorRequestObject.Shortcode = tb_Request.Text.ToString(); 

     IConnectionFactory factory = new NMSConnectionFactory("tcp://192.XXX.X.XXX:61616"); 
     IConnection connection = factory.CreateConnection(); 
     connection.Start(); 

     ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); 
     IDestination QueueDestination = SessionUtil.GetDestination(session, "Command"); 
     IMessageProducer messageProducer = session.CreateProducer(QueueDestination); 

     ITextMessage request = session.CreateTextMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ": " + tb_Request.Text.Trim()); 
     request.Properties.SetString("deviceID", "12345"); 
     messageProducer.Send(request); 

     session.Close(); 
     connection.Stop(); 

     tb_Request.Text = ""; 
     tb_Request.Focus(); 

ライン "request.Properties.SetString(" のdeviceIDを"、" 12345 ");"セレクタのキー/値のペアを追加する場所です。これは、どのコンシューマがどのメッセージを受け取るかを選択するために使用します。 ( '「忘れないでください)「=文字列セレクタ 『のdeviceID =『12345』』

string Selector = "deviceID = '12345'"; 
     IConnectionFactory factory = new NMSConnectionFactory("tcp://192.XXX.X.XXX:61616"); 
     IConnection connection = factory.CreateConnection(); 
     connection.Start(); 
     ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge); 

     IDestination destination = SessionUtil.GetDestination(session, "Command"); 
     IMessageConsumer messageConsumer = session.CreateConsumer(destination, Selector); 

     IMessage message = messageConsumer.Receive(); 

     string NewCommand = ""; 

     if (message != null) { 
      ITextMessage IText = message as ITextMessage; 
      if (IText != null) { 
       if (!string.IsNullOrEmpty(IText.Text)) { 
        NewCommand = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ": " + IText.Text; 
       } 
      } 
     } 
     tb_Command.Text = tb_Command.Text + "\r\n" + NewCommand; 
     messageConsumer.Close(); 
     messageConsumer.Dispose(); 
     connection.Stop(); 
     connection.Close(); 
     connection.Dispose(); 

設定:

は「のdeviceID」の値に基づいてメッセージを取得するには、私はこのコードを使用します消費者は上記のみ示したセレクタを使用して送信されたキューからメッセージを取る意味

ご注意:上記のコードはほとんどない「ベストプラクティス」またはそれができるほど高速でコンパクトです。これは単純に私がコードを動作させる方法です。

これは、同じ問題を抱えている人に役立ちます。

はあなたを参照してくださいリンクから

関連する問題