假设我在rabbitmq服务器上有一个生产者,它将生成一个随机数并将其传递给消费者。消费者将从生产者那里收到所有随机数。如果我要杀死我的消费者进程,生产者在这种情况下会做什么?它是否会连续生成数字,当消费者(客户端)出现时,它将开始再次发送生产者或其他东西生成的所有数字......
要完全掌握该功能,您需要了解rabbitmq代理如何与交易所配合使用。我相信这会解决你的问题。
您将创建一个交换,而不是发送到单个队列。生产者发送到交易所。在这种状态下,此时没有队列,消息将被丢弃。然后,您需要创建一个队列以便消费者接收消息。消费者将创建队列并将其绑定到交换器。此时队列将接收消息并将其传递给消费者。
在您的情况下,您可能会使用扇出交换,这样您就无需担心绑定和路由密钥。但您还应该将队列设置为自动删除。这将确保当消费者退出时队列将被删除。因此,生产者不受此影响,将继续向交换器发送被丢弃的消息,直到队列重新连接。
现在我假设你们有一个话题交换。如果存在一个队列并且它绑定到生产者的相同交换和路由键(或点分前缀),则无论那里是否有消费者,队列都会构建消息...... 在大多数情况下。
RabbitMQ 消息传递模型的核心思想是生产者 从不直接向队列发送任何消息。其实很多时候 生产者甚至不知道消息是否会被传递给任何人 根本不排队。 -- http://www.rabbitmq.com/tutorials/tutorial- Three-python.html
如果队列不存在,消息将被丢弃。如果队列确实存在(即它是持久的),您可以对队列和/或消息进行一些配置,以便您的消息具有 TTL 或生存时间:(http://www.rabbitmq.com /ttl.html 和 http://www.rabbitmq.com/dlx.html)。您可能还想研究并了解队列持久性和自动删除。我强烈建议您查看 AMQP 快速参考,因为您可以从中找出您想要的内容:http://www.rabbitmq.com/amqp-0-9-1-quickref.html。您必须将伪代码转换为您的库或客户端。
基本上,这一切都归结为交换类型以及队列和消息的配置。
rabbit mq 中的 q 代表队列。这意味着放置在队列中的所有消息(在您的情况下是生产者随机数)将保留在队列中,直到有人来获取它们。