【发布时间】:2017-04-18 17:38:04
【问题描述】:
所以场景是 1 个发布者和 2 个消费者。队列需要消费者的确认才能将消息从队列中删除。
第一个消费者从队列接收消息但没有确认,因此消息保留在队列中。
当第二个消费者从队列中读取时,第二个消费者会收到消息吗?还是发布者必须等待来自第一个消费者的 Nack,才能将该消息传递给第二个消费者?
【问题讨论】:
所以场景是 1 个发布者和 2 个消费者。队列需要消费者的确认才能将消息从队列中删除。
第一个消费者从队列接收消息但没有确认,因此消息保留在队列中。
当第二个消费者从队列中读取时,第二个消费者会收到消息吗?还是发布者必须等待来自第一个消费者的 Nack,才能将该消息传递给第二个消费者?
【问题讨论】:
在收到确认(ack 或 nack)之前,消息将保留在队列中,但不会传递给另一个竞争消费者。
只有当一个带有 requeue=true 的 nack 被发送时,另一个消费者才会得到它。并且不能保证它会是消费者 2。如果消费者 1 仍在运行,那么它可能会被传递回消费者 1。这取决于在该时间段内是否有其他消息已处理。
【讨论】: