[我们注意到,一旦具有特定_AMQ_DUPL_ID
值的消息通过队列,如果消息生产者试图再次将具有相同_AMQ_DUPL_ID
值的消息发送到同一队列,则代理将其丢弃。但是,我们需要仅在重复消息仍在队列中时才丢弃它们。
有没有办法实现这个目标?
我们使用数据库中的主键作为_AMQ_DUPL_ID
值。这是我们使用的代码
public void sendMessage(final T msg, final String id) {
jmsTemplate.send(destination, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
Message message = session.createObjectMessage(msg);
message.setStringProperty("_AMQ_DUPL_ID", id);
return message;
}
});
}
我们正在寻找一种解决方案,因为我们有一个计时器,每30秒就会从DB加载具有字段特定值的所有记录,并将它们放入JMS队列。消费者使用JMS消息,对其进行处理,更新其status
status
字段,将其插入/更新到数据库中,并打开与我们无法控制的另一个应用程序的Websocket连接。有时,使用者挂断了websocket调用,因此,在计时器继续填充队列的同时,它仍然很忙。为了解决这个问题,我们认为像Artemis这样的重复消息检测会有所帮助。但是,当外部应用程序挂起我们的使用者时,我们需要计时器才能将消息再次放入队列。我们在JBoss EAP 7.1上使用ActiveMQ Artemis。我们注意到,一旦具有特定_AMQ_DUPL_ID值的消息通过队列,则如果消息生产者尝试发送具有...