【发布时间】:2019-03-24 04:02:29
【问题描述】:
我能够为 IBM mq 设置关联 ID,但无法为消息设置消息 ID 我正在设置的消息 ID 被 MQ 覆盖 如何将此消息 ID 设置为低于 1 是我正在尝试的代码 请帮助我在这个任务上。代码中有什么我需要做的吗???
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 报告了错误。 使用链接异常来确定此错误的原因。检查指定的队列和队列管理器是否定义正确。
由于这条线
【问题讨论】:
-
在应用程序中设置 MsgId 是个坏主意。让队列管理器为您生成一个唯一的 MsgId。如果您需要设置一个值,请使用 CorrelationId 或简单地设置一个消息属性。
-
@Roager 我对我的经理说了同样的话,但他说这是强制性的,没有说明理由
-
因此,由于未来的编码错误,您经理的想法可能会在将来引入具有重复 MsgId 的消息。 IBM 表示,如果您让队列管理器生成 MsgId,那么它将生成为唯一的。告诉您的经理他/她的想法违反了 IBM 的 MQ 最佳实践。