activemq点对点模式,如果有多个消费者,它是如何保证消息不会重复消费的?
首先看queues:
Number Of Consumers 消费者的数量,如果打开了2个会话,每个会话2个consumer,则该值为4。 Number Of Pending Messages 等待消费的消息数,即当前未出队列的数量。 Messages Enqueued 进入队列的消息的总数量,包括已经消费了的。 Messages Dequeued 出了队列的消息的总数量,可以理解为是消费者消费掉的数量。再看下consumers的情况:
可以知道,ActiveMQ把消息分发到不同队列里,每个队列都有1个消费者。如果消费者停止消费,分发了的消息将会重新被分发到其他消费者的队列。消费者主动拉取消息,这样保证了消息不会被多个消费者得到。