假设我在rabbitmq服务器上有一个生产者,它将生成一个随机数并将其传递给消费者。消费者将从生产者那里收到所有的随机数。如果我将杀死我的消费者进程,生产者将在这种情况下做什么?无论它是否会连续生成数字,以及消费者(客户端)何时会出现,它都会开始再次发送生产者或其他东西生成的所有数字……
发布于 2013-02-08 19:24:22
要完全接受这些功能,您需要了解rabbitmq代理是如何处理交换的。我相信这会解决你的问题。
您将创建一个交换,而不是发送到单个队列。生产者将数据发送到交易所。在这种状态下,此时没有队列,消息将被丢弃。然后,您将需要创建一个队列,以便使用者能够接收消息。使用者将创建队列并将其绑定到交换。在这一点上,队列将接收消息并将它们传递给使用者。
在您的例子中,您可能会使用扇出交换,这样就不需要担心绑定和路由关键字了。但是你也应该将你的队列设置为自动删除。这将确保当消费者下降时,队列将被删除。因此,生产者将继续向交换发送被丢弃的消息,直到队列重新连接为止。
发布于 2013-02-09 00:41:53
现在,我将假设您有一个主题交换。如果有一个队列,并且它绑定到生产者的相同交换和路由关键字(或点分前缀),那么无论那里是否有消费者,队列都将构建消息……大部分。
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。您必须将伪代码转换为您的库或客户端。
基本上,这一切都归结为交换的类型以及队列和消息的配置。
发布于 2013-02-08 01:37:21
兔mq中的Q代表队列。这意味着放在队列中的所有消息,在您的例子中是生产者随机数,将一直保留在队列中,直到有人来获取它们。
https://stackoverflow.com/questions/14757199
复制相似问题