3

ネイティブAPIを使用して.Netクライアントを使用してリモートMQから論理的にグループ化されたメッセージを受信しようとしています[amqmdnet-ネイティブAPIを使用してJavaクライアントによって配置されたWebSphereMQClassesfor.NET]。

論理的にグループ化されたメッセージを取得している間、そのグループ内のすべてのメッセージにいくつかのヘッダー情報が表示されます。これらの情報は、各エディター[notepad ++、editplusなど]で異なって表示されます。

以下に指定されたヘッダー情報は、そのグループ内のすべての論理メッセージに「MDE」のように追加されます。

以下のようにgetmessageoptions、を使用しています。openoptions

mintMQQueueOpenOptions = IBM.WMQ.MQC.MQOO_INPUT_SHARED + IBM.WMQ.MQC.MQOO_FAIL_IF_QUIESCING
mobjMQGetMessageOptions = New MQGetMessageOptions
mobjMQGetMessageOptions.Options = IBM.WMQ.MQC.MQGMO_NO_SYNCPOINT +  IBM.WMQ.MQC.MQGMO_FAIL_IF_QUIESCING
'mobjMQGetMessageOptions.Options = mobjMQGetMessageOptions.Options + MQC.MQGMO_LOGICAL_ORDER  'Or MQC.MQGMO_ALL_MSGS_AVAILABLE

そのグループ内のすべての論理メッセージを読み取るためのコードスニペット、

            '=================================
            ' INTANTIATE THE MQ MESSAGE OBJECT
            objMQMessage = New MQMessage
            objMQMessage.Format = MQC.MQFMT_STRING
            '=================================
            ' CLEAR THE MESSAGE VARIABLE
            strMQMessage = ""

            Do
                '============================
                ' GET THE MESSAGE FROM THE MQ
                mobjMQQueue.Get(objMQMessage, mobjMQGetMessageOptions)

                '============================
                ' READ THROUGH THE MESSAGE
                strMQMessage += objMQMessage.ReadString(objMQMessage.MessageLength)

                '============================
                ' SET GMO.MATCHOPTIONS TO GROUP ID, INITIALLY IT WAS SET TO "MQC.MQMO_NONE"                            
                mobjMQGetMessageOptions.MatchOptions = MQC.MQMO_MATCH_GROUP_ID

                '============================
                ' DO UNTIL - MESSAGE IS THE LAST IN THE GROUP OR THE GROUP CONSISTS OF ONLY ONE MESSAGE.
            Loop While (mobjMQGetMessageOptions.GroupStatus <> MQC.MQGS_LAST_MSG_IN_GROUP)

            '====================================
            ' COLLECT THE MESSAGE IN AN ARRAYLIST
            If Not String.IsNullOrEmpty(strMQMessage) Then objMQMessageList.Add(strMQMessage)

            '============================
            ' COMMIT THE FETCH OPERATION
            mobjMQQueueManager.Commit()

各メッセージからこのヘッダー情報を削除するにはどうすればよいですか?

4

1 に答える 1

2

には、バージョン 2のMQMDEMQMD には存在するが、バージョン 1 の MQMD には存在しない MQMD フィールドが含まれています。Infocenter トピックMQMD の概要でMQMDは、バージョンが GET 呼び出しの動作にどのように影響するかについて説明しています。

MQGET 呼び出しで、アプリケーションがバージョン 1 の MQMD を提供する場合、キュー マネージャーは返されるメッセージに MQMDE をプレフィックスとして付けますが、それは MQMDE 内の 1 つ以上のフィールドにデフォルト以外の値がある場合のみです。MQMD の Format フィールドには、MQMDE が存在することを示す値 MQFMT_MD_EXTENSION が含まれます。

これに基づいて、バージョン 2 を提供することをお勧めしMQMDます。おそらくこれで問題が解決します:

            '=================================
            ' INTANTIATE THE MQ MESSAGE OBJECT
            objMQMessage = New MQMessage
            objMQMessage.Version = 2
            objMQMessage.Format  = MQC.MQFMT_STRING
            '=================================

objMQMessageは連続する呼び出しで再利用されるため、各 GET の前にバージョンを設定する必要がある場合があります。

IBM MQ ナレッジ センターのページ「MQMDE - メッセージ記述子拡張機能 > MQMDE の概要」にも、このトピックに関するいくつかの役立つ情報があります。

使用法:バージョン 2 の MQMD を使用するアプリケーションは、MQMDE 構造に遭遇しません。ただし、特殊なアプリケーション、およびバージョン 1 の MQMD を引き続き使用するアプリケーションは、状況によっては MQMDE に遭遇する可能性があります。MQMDE 構造は、次の状況で発生する可能性があります。

  • MQPUT および MQPUT1 呼び出しで指定
  • MQGET 呼び出しによって返される
  • 伝送キューのメッセージ内
于 2012-11-07T12:22:09.590 に答える