0

假设我在 rabbitmq 服务器上有一个生产者,它将生成一个随机数并将其传递给消费者。消费者将收到来自生产者的所有随机数。如果我要杀死我的消费者进程,那么生产者在这种情况下会做什么?它是否会持续生成数字以及消费者(客户端)何时出现,它将开始再次发送生产者或其他东西生成的所有数字......

4

3 回答 3

1

要完全接受这些功能,您需要了解 rabbitmq 代理如何与交易所一起工作。我相信这会解决你的问题。

您将创建一个交换,而不是发送到单个队列。生产者发送到交易所。在此时没有队列的这种状态下,消息将被丢弃。然后,您需要创建一个队列以便消费者接收消息。消费者将创建队列并将其绑定到交换器。此时队列将接收消息并将它们传递给消费者。

在您的情况下,您可能会使用扇出交换,这样您就不必担心绑定和路由密钥。但是您还应该将队列设置为自动删除。这将确保当消费者下线时,队列将被删除。因此,不受此影响的生产者将继续向交换器发送消息,这些消息将被丢弃,直到队列重新连接。

于 2013-02-08T11:24:21.630 回答
1

现在我假设你有一个主题交流。如果有一个队列并且它绑定到生产者的相同交换和路由键(或点前缀),那么无论那里是否有消费者,队列都会建立消息......在大多数情况下

RabbitMQ 中消息传递模型的核心思想是生产者从不直接向队列发送任何消息。实际上,生产者通常根本不知道消息是否会被传递到任何队列。-- http://www.rabbitmq.com/tutorials/tutorial-three-python.html

如果队列不存在,则消息将被丢弃。如果队列确实存在(即它的持久性),您可以对队列和/或消息进行配置,以使您的消息具有 TTL 或生存时间:( http://www.rabbitmq.com/ ttl.htmlhttp://www.rabbitmq.com/dlx.html)。您可能还想研究并了解队列持久性和自动删除。我强烈建议您查看 AMQP 快速参考,因为您可以从中找出您想要的内容:http ://www.rabbitmq.com/amqp-0-9-1-quickref.html 。您必须将伪代码转换为您的库或客户端。

基本上这一切都归结为什么类型的交换以及队列和消息的配置。

于 2013-02-08T16:41:52.857 回答
0

rabbit mq 中的 q 代表队列。这意味着放置在队列中的所有消息(在您的情况下为生产者随机数)将保留在队列中,直到有人来获取它们。

于 2013-02-07T17:37:20.830 回答