Java Spring JmsTemplate.setMessageId被覆盖
我正在探索jmsTemplate实现,遇到了一个问题。JMSMessageId可以手动应用于消息,但回调返回不同的MessageId 示例代码:Java Spring JmsTemplate.setMessageId被覆盖,java,spring-jms,jmstemplate,Java,Spring Jms,Jmstemplate,我正在探索jmsTemplate实现,遇到了一个问题。JMSMessageId可以手动应用于消息,但回调返回不同的MessageId 示例代码: log.debug("Sending request " + jmsMessageId); final AtomicReference<Message> msg = new AtomicReference<>(); jmsTemplate.send(destinationQueue, sessio
log.debug("Sending request " + jmsMessageId);
final AtomicReference<Message> msg = new AtomicReference<>();
jmsTemplate.send(destinationQueue,
session -> {
Message message = session.createTextMessage(body);
message.setJMSMessageID(jmsMessageId);
msg.set(message);
return message;
});
log.debug("Request sent " + msg.get().getJMSMessageID());
我希望两个ID都是一样的。
由于IBM提供的文档:
JMS_IBM_MQMD_MsgId属性重写JMSMessageID属性的JMS默认处理。当服务集成将消息转换为WebSphere MQ格式时,服务集成将检查是否已显式设置JMS_IBM_MQMD_MsgId属性。如果是这样,服务集成会将MQMD MsgId字段设置为此值(字节[]),并替换JMS分配给消息的JMSMessageID的唯一值
那么,显式定义的MsgId不应该被重写,而应该被编码?我的配置中是否缺少某些内容,或者这是一种正常行为?
setJMSMessageId
不执行任何操作-从
此方法仅供JMS提供程序在发送消息时用于设置此字段客户端无法使用此消息来配置消息ID。此方法是公开的,允许JMS提供程序在发送非自己实现的消息时设置此字段
(我的重点)
在任何情况下,措辞都与你所做的相反
JMS_IBM_MQMD_MsgId属性重写JMSMessageID属性的JMS默认处理
i、 e.您必须设置JMS\u IBM\u MQMD\u MsgId
属性,它将覆盖生成的JMSMessageID
2019-05-14 15:36:41.308 DEBUG Sending request 2136b3c2-71c7-437a-892f-5e72d27a54f1
2019-05-14 15:36:41.487 DEBUG Request sent ID:414d51205445535420202020202020204be2be5c02e71527