Search code examples
node.jsjmeterjmsibm-mq

Getting message in ibmmq Node.js


I'm using ibmmq module https://github.com/ibm-messaging/mq-mqi-nodejs

I need to get an xml message from a queue and than make an xsl-transformation. I put messages to the queue with JMeter and if I browse messages in rfhutil I can see them as is on the Data tab. But when I get it in the code

 function getCB(err, hObj, gmo,md,buf, hConn ) {
   // If there is an error, prepare to exit by setting the ok flag to false.
   if (err) {...
   } else {
     if (md.Format=="MQSTR") {
       console.log("message <%s>", decoder.write(buf));
     } else {
       console.log("binary message: " + buf);
     }
  }

I get my message with some service information:

buf=RFH �"�MQSTR � <mcd><Msd>jms_text</Msd></mcd> X<jms><Dst>queue://MY_QM/MY_QUEUE</Dst><Tms>1657791724648</Tms><Dlv>2</Dlv></jms> ...My_message...

How can I get only My message like I do in rfhutil? I can get it with string methods, but it looks like crutches.


Solution

  • That message has the headers created by a JMS application. There are various ways of dealing with it. You can

    • Have the sending app disable sending that structure (setting the targClient property)
    • Use GMO options to ignore the properties (MQGMO_NO_PROPERTIES)
    • Have your application deal with the RFH2 stucture. See for example the amqsget.js sample in the Node.js repo which includes this fragment:
        switch (format) {
          case MQC.MQFMT_RF_HEADER_2:
            hdr   = mq.MQRFH2.getHeader(buf);