Как установить идентификатор сообщения для IBM MQ с помощью Java-программы - PullRequest
0 голосов
/ 19 октября 2018

Я могу установить идентификатор корреляции для IBM mq, но не могу установить идентификатор сообщения для сообщения. Идентификатор сообщения, который я задаю, переопределяется MQ. Как установить этот идентификатор сообщения ниже единицы, это код, который я пытаюсь, пожалуйста, помогитея на этой задаче.Есть ли что-то, что мне нужно сделать в коде ???

 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 голосов
/ 19 октября 2018

Спецификация JMS указывает, что идентификатор сообщения должен быть установлен поставщиком JMS и что он должен быть либо уникальным, либо нулевым, то есть вы не можете установить его самостоятельно.

Однако вы можете использовать IBMСпециальное расширение MQ для самостоятельной установки идентификатора сообщения, учитывая, что вы сейчас нарушаете спецификацию JMS.

Для этого вам нужно установить JMS_IBM_MQMD_MsgId, значение которого затем копируется в JMSMessageID (т.е. вы не можете установить его напрямую).

Теперь вы знаете имя атрибута, который нужно установить, см. этот другой вопрос для получения дополнительной информации и примера кода в ответе от IBMMQ JMS expert (@Calanais).

Дополнительные сведения

...