【问题标题】:How Rabbit MQ Consumers Work?Rabbit MQ 消费者如何工作?
【发布时间】:2016-10-25 22:08:03
【问题描述】:
我有 2 个关于 rabbitmq 消费者(接收者)的问题:
- 我如何定义(从队列中静态地)注册到某个队列的消费者是什么,这样,如果一个消费者宕机了,消息在该消费者再次启动后仍然会被传递,或者是否有任何其他消费者实现这一目标的方法?
- 消费者如何连接到尚未创建的队列,在rabbitmq教程中,我可以在生产者之前调用消费者并且它仍然可以工作,有人可以解释一下这是如何工作的吗?
谢谢
【问题讨论】:
标签:
php
rabbitmq
message-queue
php-amqplib
【解决方案1】:
要实现你想要的很简单,这是 rabbitmq 的设计(只要确保你没有自动确认)。该消息将保留在队列中,直到它被确认。所以基本上消费者应该完成对消息的处理然后确认它。如果消费者在处理过程中死亡,则消息不会被确认并重新排队。下次消费者起来时,它会收到该消息。当然,如果您有多个相同(为简单起见)消费者的实例,那么启动的消费者会接收重新排队的消息。很好解释in the second tutorial on rmq website。
声明队列是幂等操作,如果队列不存在则创建队列。如果消费者是第一个创建队列的人,那很好,它实际上通常是如何工作的。发布者实际上甚至(不需要)知道队列,它只关心交换和路由密钥。它也不关心是否有人在听,它只是发布消息。消费者需要告诉它要绑定队列的路由键。