ActiveMQ 显示所有已确认的消息,尽管我只确认了一个

ActiveMQ shows all messages acknowledged although I have only acknowledged one

我创建了一个生产者,其交易 falseCLIENT_ACKNOWLEDGE 将 99 条消息放入队列。

我为具有不同会话的同一队列创建了一个消费者,并处理了 falseCLIENT_ACKNOWLEDGE

第一条消息我没有确认,剩下的98条消息我都确认了。

我打开了 ActiveMQ 管理控制台,预计会看到 1 条待处理的消息/队列中的 1 条消息,但令我惊讶的是,我看到所有 99 条消息都已出队。

谁能指出我错在哪里?

您看到的是 JMS 规范规定的预期行为。 JMS 1.1 规范中标题为 "Message Acknowledgment" 的第 4.4.11 节指出:

CLIENT_ACKNOWLEDGE - With this option, a client acknowledges a message by calling the message’s acknowledge method. Acknowledging a consumed message automatically acknowledges the receipt of all messages that have been delivered by its session. [emphasis added]

如果您使用的是 ActiveMQ 5.x,那么您可以使用 ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE 模式,它是 JMS 规范之外的扩展。