【发布时间】:2020-02-20 11:26:56
【问题描述】:
如果 ActiveMQ Artemis 配置了 redelivery-delay > 0 并且 JMS 侦听器使用 ctx.rollback() 或 ctx.recover() 则代理将按预期重新传递消息。但是,如果生产者在重新传递期间将消息推送到队列,那么接收者会收到无序的消息。
例如:
队列:1 -> 消息 1 按预期重新传递
在重新交付阶段推送
队列:2,3 -> 接收者得到 2,3,1
redelivery-delay 和 0 一切正常,但消费者方面的重新交付频率太高。我的期望是,在未确认的消息从队列中清除或确认之前,应该停止向消费者的每次传递。我们正在使用队列来连接单个设备。每个设备都有自己的 I/O 队列,只有一个消费者。 queue 这个词对我来说意味着严格的排序。让这种行为像“strict_redelivery_order”一样可配置可能会很好。
【问题讨论】:
-
创建一个重新发送延迟为 1 毫秒的代理配置。推送消息,然后将其回滚。在此之后,阿尔忒弥斯将消息重新渲染为加速。每 1 毫秒。现在推送第二个消息。这将立即交付。我的期望是,每次向消费者的交付都应该停止,直到未确认的消息被清除或从队列中确认
-
我同意一般用途。但是我们使用队列来连接单个设备。每个设备都有自己的 I/O 队列,只有一个负责的消费者。单词队列建议我严格排序。让这种行为像“strict_redelivery_order”这样可配置会很好
标签: activemq-artemis