我能够为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报告了错误。 使用链接的异常来确定此错误的原因。检查指定的队列和队列管理器是否正确定义。
由于此行
答案 0 :(得分:1)
JMS规范指示消息ID必须由JMS提供者设置,并且它必须是唯一的或为null,即您不能自己设置它。
但是,考虑到您现在违反了JMS规范,您可以使用IBM MQ特定的扩展名自行设置Message ID。
为此,您需要设置JMS_IBM_MQMD_MsgId
,然后将其值复制到JMSMessageID
中(即,您不能直接设置它)。
现在您知道要设置的属性的名称,有关更多详细信息和代码示例,请参见this other question,来自IBM MQ JMS专家(@Calanais)。
进一步阅读