我试图在推送到Azure Queue之前自定义JMSMessageID,由于某种原因,这个id没有进入队列,而是我看到针对MessageID生成的随机ID。当我调试代码时,我可以看到messageID已正确设置,直到调用MessageProducer.send(message)。我们正在使用spring框架JMSTemplate。有人可以帮忙吗?
jmsTemplate.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
TextMessage message = session.createTextMessage();
message.setText(message);
message.setJMSMessageID("ID:" + "MessageId + "1");
System.out.println("Message Id: " + message.getJMSMessageID());
return message;
}
}
答案 0 :(得分:0)
对于JMS规范,您尝试做的是非法的,"JMSMessageID"
无法更改/设置。
来自javadoc:
void setJMSMessageID(String id)throws JMSException
Sets the message ID.
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.
来自API javadoc here
的参考答案 1 :(得分:0)
某些JMS消息标头属性由JMS代理设置,而不是由客户端应用程序设置。例如JMSTimestamp和JMSMessageID。 JMS代理本身确保此ID是唯一的,因此您无法在客户端应用程序中控制它。一旦它处理它并且找出一个唯一的ID,它将被JMS Broker覆盖。
如果要为邮件分配ID,请使用JMSCorrelationID标头属性。