0

あるキューで送信されたメッセージが別のキューで受信されるかどうかをテストする 2 つのメソッドを作成しようとしています。

メソッドの送信 - 「メッセージ 123」などのメッセージを送信して、一意の相関 ID を持つキューをエクスポートします。

メソッドを取得

このキューには多くのメッセージがありますが、相関 ID に基づいて上から送信したメッセージのみを取得したいと考えています。

相関 ID に基づいてメッセージをチェックするコード

      properties = new Hashtable();
       properties.Add(MQC.CONNECTION_NAME_PROPERTY, "connection name");
       properties.Add(MQC.TRANSPORT_PROPERTY, "transport type");
       properties.Add(MQC.CHANNEL_PROPERTY, "channel name"); 
       properties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_HANDLE_SHARE_BLOCK);



       mqGetMsgOpts = new MQGetMessageOptions();
       mqGetMsgOpts.Options = MQC.MQGMO_BROWSE_FIRST | MQC.MQGMO_WAIT | MQC.MQOO_INQUIRE;
       mqGetMsgOpts.MatchOptions = MQC.MQMO_MATCH_CORREL_ID;
       mqGetMsgOpts.WaitInterval = 3000; //3 secs wait time

直面している問題は、メッセージを読むときに、インポート キューからすべてのメッセージを取得することです。

自分が送信したメッセージだけを取得し、エクスポート キューで受信したメッセージが自分のものであることを確認するにはどうすればよいですか?

理論的には、このようなもの

インポート キューの message.correlationid は、エクスポート キューの message.correlationid と一致します。

4

1 に答える 1

1

メッセージを読むときに、スニペットにcorrelIdの設定が表示されません。指定されたcorrelIdに一致するメッセージのみを取得するこのサンプルコードがあります.

前と同様に、スニペットにはまだMQC.MQOO_INQUIREfor MQGMO. のMQOOOpen Options_MQGMOGet message options

        try
        {
            importQ = qm.AccessQueue("Q2", MQC.MQOO_INPUT_SHARED | MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING);

            // Put one message. MQ generates correlid
            MQMessage mqPutMsg = new MQMessage();
            mqPutMsg.WriteString("This is the first message with no app specified correl id");
            importQ.Put(mqPutMsg);

            // Put another messages but with application specified correlation id
            mqPutMsg = new MQMessage();
            mqPutMsg.WriteString("This is the first message with application specified correl id");
            mqPutMsg.CorrelationId = System.Text.Encoding.UTF8.GetBytes(strCorrelId);
            MQPutMessageOptions mqpmo = new MQPutMessageOptions();
            importQ.Put(mqPutMsg,mqpmo);

            mqPutMsg = new MQMessage();

            // Put another message with MQ generating correlation id
            mqPutMsg.WriteString("This is the second message with no app specified correl id");
            importQ.Put(mqPutMsg);

            // Get only the message that matches the correl id
            MQMessage respMsg = new MQMessage();
            respMsg.CorrelationId = System.Text.Encoding.UTF8.GetBytes(strCorrelId);
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.WaitInterval = 3000;
            gmo.Options = MQC.MQGMO_WAIT;
            gmo.MatchOptions = MQC.MQMO_MATCH_CORREL_ID;

            importQ.Get(respMsg, gmo);
            Console.WriteLine(respMsg.ReadString(respMsg.MessageLength));
        }
于 2013-04-26T03:50:43.740 に答える