我目前正在尝试使用纯 java 将一堆简单消息发送到队列。
public AtomicReference<Message> doSend(String message, String queue){
try (JMSContext context = connectionFactory.createContext()) {
TextMessage textMessage = context.createTextMessage(message);
final AtomicReference<Message> msg = new AtomicReference<>();
msg.set(textMessage);
log.info("Sending message to queue {}", queue);
context.createProducer().send(createDestination(context, queue), textMessage);
log.info("Message sent to queue {}, messageId provided {}", queue, msg.get().getJMSMessageID());
return msg;
}
catch (Exception e) {
log.error("Failed to send message to queue",e);
throw new SipJmsException("Failed to send message to queue", e);
}
}
private Destination createDestination(JMSContext context, String queue){
log.debug("Creating destination queue {} connection",queue);
return context.createQueue(queue);
}
我连续发送 N 条消息,日志显示 JMSMessageId 始终生成相同。
[main] Sending message to queue TEST_QUEUE
[main] Message sent to queue TEST_QUEUE, messageId provided ID:414d5120444556494d53514d20202020551c3f5d81619824
[main] Sending message to queue TEST_QUEUE
[main] Message sent to queue TEST_QUEUE, messageId provided ID:414d5120444556494d53514d20202020551c3f5d83619824
ETC。
据我所知,JMSMessageId 应该是唯一的,它的冲突会导致问题。
O'Reily 的书说:
JMSMessageID 是一个唯一标识消息的字符串值。标识符的唯一性取决于供应商。JMSMessageID 对于需要对消息进行唯一索引的 JMS 消费者应用程序中的历史存储库很有用。与 JMSCorrelationID 结合使用,JMSMessageID 也可用于关联消息:String messageid = message.getJMSMessageID();
那么,为什么 MessageId 不是唯一的呢?(应用程序运行之间甚至相同)。
慕斯王
撒科打诨
狐的传说
相关分类