gpt4 book ai didi

java - Spring JmsTemplate.setMessageId 被重写

转载 作者:行者123 更新时间:2023-12-02 09:54:02 24 4
gpt4 key购买 nike

我正在探索 jmsTemplate 实现并遇到一个问题。可以手动将 JMSMessageId 应用于消息,但回调会返回不同的 MessageId。

示例代码:

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());

输出为:

 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

我原以为两个 ID 是相同的。根据 IBM 的文档:

JMS_IBM_MQMD_MsgId 属性覆盖 JMSMessageID 属性的默认处理。当服务集成将消息转换为 WebSphere MQ 格式时,服务集成会检查是否已显式设置 JMS_IBM_MQMD_MsgId 属性。如果是这样,服务集成会将 MQMD MsgId 字段设置为此值 (byte[]) ,并替换 JMS 分配给消息的 JMSMessageID 的唯一值。

那么,显式定义的 MsgId 不应该被覆盖,而只能被编码?我的配置中缺少某些内容还是这是正常行为?

最佳答案

setJMSMessageId 不执行任何操作 - 来自 the javadocs .

This method is for use by JMS providers only to set this field when a message is sent. This message cannot be used by clients to configure the message ID. This method is public to allow a JMS provider to set this field when sending a message whose implementation is not its own.

(我的重点)。

无论如何,措辞与你正在做的事情相反......

The JMS_IBM_MQMD_MsgId property overrides the JMS default processing of the JMSMessageID property. ...

即您必须设置 JMS_IBM_MQMD_MsgId 属性,它将覆盖生成的 JMSMessageID

关于java - Spring JmsTemplate.setMessageId 被重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56135309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com