如何使用Java程序为IBM MQ设置消息ID

时间:2018-10-19 09:16:31

标签: java jms ibm-mq

我能够为IBM mq设置相关性ID,但是无法为MQ覆盖我正在设置的消息ID的消息设置消息ID。如何在下面设置此消息ID是我正在尝试的代码,请帮助我在完成这项任务。代码中有什么我需要做的吗?

 public static void main(String args[]) 
    {

    try{
       MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
          cf.setHostName("xxx");
          cf.setPort(4444);
          cf.setTransportType(1);
          cf.setQueueManager("xxxx");
          cf.setChannel("CLIENT.xyZ");

          MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
          MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

          MQQueue queue = (MQQueue) session.createQueue("WW.ESB.ENTRY.SERVICE.IN");
          queue.setBooleanProperty(WMQConstants.WMQ_MQMD_WRITE_ENABLED, true);
 queue.setIntProperty(WMQConstants.WMQ_MQMD_MESSAGE_CONTEXT, WMQConstants.WMQ_MDCTX_SET_IDENTITY_CONTEXT);
          MQQueueSender sender =  (MQQueueSender) session.createSender(queue);

          true);




          File f=new File("C:/InputPayloads/Payloads/test4.xml");
          JMSTextMessage message = (JMSTextMessage) session.createTextMessage(FileUtils.readFileToString(f)); 
          message.setStringProperty("JMS_IBM_MQMD_UserIdentifier", "avada2");


          // Hex-string 010203040506070801020304050607080102030405060708
          byte[] customMessageId = new byte[24];
          for (int i = 0; i < 24; i++) {
            customMessageId[i] = (byte) ((i % 8) + 1);
          }

           message.setObjectProperty(WMQConstants.JMS_IBM_MQMD_MSGID, customMessageId);


          message.setStringProperty("xxx", "SH_TEST04");
          message.setStringProperty("yyy", "JP");
          message.setStringProperty("zzz", "1");
          connection.start();

          System.out.println("before Sent message:\\n" + message);

          sender.send(message);
          System.out.println("Sent message:\\n" + message);

          sender.close();
          session.close();
          connection.close();
    }catch(Exception e)
    {
        System.out.println(e);
    }
}

} 我遇到错误了

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2008: Failed to open MQ queue 'WW.zzz.xxx.yyy.zz'.

JMS尝试执行MQOPEN,但是IBM MQ报告了错误。 使用链接的异常来确定此错误的原因。检查指定的队列和队列管理器是否正确定义。

由于此行

1 个答案:

答案 0 :(得分:1)

JMS规范指示消息ID必须由JMS提供者设置,并且它必须是唯一的或为null,即您不能自己设置它。

但是,考虑到您现在违反了JMS规范,您可以使用IBM MQ特定的扩展名自行设置Message ID。

为此,您需要设置JMS_IBM_MQMD_MsgId,然后将其值复制到JMSMessageID中(即,您不能直接设置它)。

现在您知道要设置的属性的名称,有关更多详细信息和代码示例,请参见this other question,来自IBM MQ JMS专家(@Calanais)。

进一步阅读