仅当重复消息仍与ActiveMQ Artemis和JBoss EAP 7.1一起时才丢弃它们>

问题描述 投票:0回答:1
我们在JBoss EAP 7.1上使用ActiveMQ Artemis。

[我们注意到,一旦具有特定_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加载具有

status

字段特定值的所有记录,并将它们放入JMS队列。消费者使用JMS消息,对其进行处理,更新其

status

字段,将其插入/更新到数据库中,并打开与我们无法控制的另一个应用程序的Websocket连接。有时,使用者挂断了websocket调用,因此,在计时器继续填充队列的同时,它仍然很忙。
为了解决这个问题,我们认为像Artemis这样的重复消息检测会有所帮助。但是,当外部应用程序挂起我们的使用者时,我们需要计时器才能将消息再次放入队列。

我们在JBoss EAP 7.1上使用ActiveMQ Artemis。我们注意到,一旦具有特定_AMQ_DUPL_ID值的消息通过队列,则如果消息生产者尝试发送具有...

activemq-artemis jboss-eap-7
1个回答
0
投票
我建议您为websocket调用实现某种超时,否则您的应用将受到无法控制的资源的负面影响。
© www.soinside.com 2019 - 2024. All rights reserved.