我使用RabbitMQ需要的是:生产者生成消息并且接收者接收到全部消息,这些消息在首次连接到队列之后发布。RabbitMQ真实世界场景
由于消费者想要消费所有发布的消息。因为如果多个消费者连接到同一个队列,消费者将不会收到所有消息(另请参阅here)。因此,消费者必须创建一个'独占'队列并连接到所需的交换机。此外,它希望收到所有即使发生故障(未来)发布的消息。因此队列是'耐用'。现在,该方案如下所示:
消费者C1创建排队并持久的队列Q1。现在它已经关闭了一段时间,同时另一个用户C2尝试连接到队列Q1。 C2将会成功,因为Q1现在没有用户连接到它。所以,C2连接到独占和持久队列。现在,如果C1尝试连接到队列Q1,则它不能这样做,因为已经有用户C2订阅了队列Q1。
如何防止这种情况?
我希望我这次清楚。
是的,你所说的完全没错。但有可能在C1关闭的时候,C2会尝试创建一个接收消息的队列。而且,无论如何,或者如果C2给出的queuename完全相同,C1就是这样使用的。那么,在那种情况下,我们的目的就会丧失。 –
是的,但这就是为什么您必须确保消费者C2队列的名称不同。应该很容易为每个消费者的队列创建新名称。 – Fgblanch