Cara menghapus informasi header pesan di pesan yang dikelompokkan WebSphere MQ saat menerima di .Net client (How to remove the message header informations in WebSphere MQ grouped message while receving in .Net client)


問題描述

Cara menghapus informasi header pesan di pesan yang dikelompokkan WebSphere MQ saat menerima di .Net client (How to remove the message header informations in WebSphere MQ grouped message while receving in .Net client)

I am trying to recevie logically grouped messages from an remote MQ using .Net client using native api [amqmdnet ‑ WebSphere MQ Classes for .NET], which was put by java client using native api.       

While we are getting the logically grouped messages we are seeing some header information in all the messages in that group which will be showing differently in each editors, [notepad++, editplus etc.]

The below specified header information's is appended in every logical message in that group something like "MDE "

We are using the getmessageoptionsopenoptions as below,

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

Code snippet to read the all the logical message in that group,

            '=================================
            ' 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()

How we can remove this header information from each message? 

‑‑‑‑‑

參考解法

方法 1:

The MQMDE contains MQMD fields that exist in the version‑2 MQMD, but not in the version‑1 MQMD.  The Infocenter topic Overview for MQMD describes how the MQMD version affects behavior of the GET call:

  

On the MQGET call, if the application provides a version‑1 MQMD, the   queue manager prefixes the message returned with an MQMDE, but only if   one or more of the fields in the MQMDE has a non‑default value. The   Format field in MQMD will have the value MQFMT_MD_EXTENSION to   indicate that an MQMDE is present.

Based on this, I would suggest providing a Version 2 MQMD.  Perhaps this will solve the problem:

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

Since the objMQMessage is reused for successive calls, you may need to set the version before each GET.

The IBM MQ Knowledge Center page "MQMDE ‑ Message descriptor extension > Overview for MQMDE" also has some useful information on the topic:

  

Usage: Applications that use a version‑2 MQMD will not encounter an MQMDE structure. However, specialized applications, and   applications that continue to use a version‑1 MQMD, might encounter an   MQMDE in some situations. The MQMDE structure can occur in the   following circumstances:

     
      
  • Specified on the MQPUT and MQPUT1 calls
  •   
  • Returned by the MQGET call
  •   
  • In messages on transmission queues
  •   

(by user1791681T.Rob)

參考文件

  1. How to remove the message header informations in WebSphere MQ grouped message while receving in .Net client (CC BY‑SA 3.0/4.0)

#ibm-mq #.net






相關問題

將 WebSphere MQ 與 Twisted 一起使用 (Using WebSphere MQ with Twisted)

Websphere MQ 和高可用性 (Websphere MQ and High Availability)

Cara menghapus informasi header pesan di pesan yang dikelompokkan WebSphere MQ saat menerima di .Net client (How to remove the message header informations in WebSphere MQ grouped message while receving in .Net client)

crtmqm:找不到命令 (crtmqm: command not found)

Cách lấy tên hàng đợi MQSeries trong .NET mà không có 2068 (How to get MQSeries queuename in .NET without 2068)

在 MQ Java 客戶端中使用 SSL 時出錯 (Error while using SSL in MQ java client)

檢測客戶端連接上的 MQ 操作 (Detecting MQ operations on client connection)

JMS API 不能瀏覽消息,IBM API 可以 (JMS API cannot browse messages, IBM API can)

Web Sphere + IMessageConsumer + 接收消息 (Web Sphere + IMessageConsumer + receiving messages)

如何配置 IIB 10 以將 monitoring_event 消息作為持久性 MQ 隊列發布? (How to configure IIB 10 to publish monitoring_event messages as persisitent to persistent MQ queue?)

spring boot jms - 在@JmsListner 中發送和接收消息 (spring boot jms - send and receive message inside @JmsListner)

如何使用 JMeter 將 XML 文件發送到 IBM MQ? (How to send the XML file using JMeter to IBM MQ?)







留言討論