【发布时间】:2020-10-09 06:24:48
【问题描述】:
我正在构建一个带有 ActiveMQ 服务器集群的 Spring Boot 应用程序。为了解决consumer端的消息重复问题,所有出队的JMSMessageID都会保存在redis中,consumer会忽略redis中所有ID重复的新消息。
为了实现这一点,我需要所有 JMSMessageID 都是唯一的。我尝试在生产者代码中设置 JMSMessageID,但似乎无法更改。我的问题是,在分布式系统中(多台应用服务器,以及一个ActiveMQ服务器集群),系统生成的JMSMessageID会不会是唯一的?
jmsTemplate.send(name, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
Email email = new Email("l****@gmail.com", "this is test body", "test");
ObjectMessage objectMessage = session.createObjectMessage();
objectMessage.setJMSMessageID(customID);
return objectMessage;
}
});
【问题讨论】:
-
你能检查消息ID是否被禁用吗?通过
getDisableMessageID之类的东西。至于它的唯一性,afaik,没有必要(因为它取决于提供者本身)
标签: java spring-boot activemq spring-jms