gpt4 book ai didi

RabbitMQ - 一个消费者是否阻塞同一队列的其他消费者?

转载 作者:行者123 更新时间:2023-12-04 14:14:15 25 4
gpt4 key购买 nike

我正处于从 RabbitMQ 文档中学习 RabbitMQ/AMQP 的阶段。有些事情我不清楚,我想问那些有实践经验的人。
我想让多个消费者监听同一个队列以平衡工作负载。我需要的是非常接近 "Work Queues" example in the RabbitMQ tutorial .
我希望消费者在完成处理后明确确认消息以保留消息并将其委托(delegate)给另一个消费者以防崩溃。处理消息可能需要一段时间。
我的问题是 AMQP 是否会推迟下一条消息处理,直到上一条消息被确认?如果是这样,我如何在多个工作人员之间实现负载平衡并保证没有消息丢失?

最佳答案

不,其他消费者不会被阻止。其他消息将被传递,即使它们有未确认但传递的前辈。如果 channel 在保留未确认消息时关闭,则这些消息将返回到队列中。

RabbitMQ Broker Semantics

Messages can be returned to the queue using AMQP methods that feature a requeue parameter (basic.recover, basic.reject and basic.nack), or due to a channel closing while holding unacknowledged messages.



编辑回应您的评论:

是时候深入了解 AMQP specification那么也许:

3.1.4 Message Queues

A message queue is a named FIFO buffer that holds message on behalf of a set of consumer applications. Applications can freely create, share, use, and destroy message queues, within the limits of their authority. Note that in the presence of multiple readers from a queue, or client transactions, or use of priority fields, or use of message selectors, or implementation-specific delivery optimisations the queue MAY NOT exhibit true FIFO characteristics. The only way to guarantee FIFO is to have just one consumer connected to a queue. The queue may be described as “weak-FIFO” in these cases. [...]

3.1.8 Acknowledgements

An acknowledgement is a formal signal from the client application to a message queue that it has successfully processed a message.[...]



所以确认确认处理,而不是收据。代理将保留该消息,直到它得到确认,以便它可以重新传递它们。但是即使之前的消息尚未被确认,也可以自由地向消费者传递更多消息。消费者不会被阻止。

关于RabbitMQ - 一个消费者是否阻塞同一队列的其他消费者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17841843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com