RabbitMQ:可以在一个线程中完成消费和发布吗?

时间:2013-01-31 18:55:28

标签: python rabbitmq python-multithreading

可以使用RabbitMQ通道在一个Python线程中完成消费和发布吗?

4 个答案:

答案 0 :(得分:0)

我认为你不应该这样做。 MQ意味着异步处理。在我看来,同一个线程中的消费和生产都会失败。

答案 1 :(得分:0)

我建议您查看Celery(http://celery.readthedocs.org/en/latest/)来管理工作任务。这样,您就不需要直接与RMQ集成,因为它将为您处理生产和消费。

但是,如果您希望直接与RMQ集成并管理自己的员工,请查看Kombu(http://kombu.readthedocs.org/en/latest/)进行集成。有非阻塞的消费者和生产者允许你在同一个事件循环中同时拥有这两者。

答案 2 :(得分:0)

我认为你问题的简单答案是肯定的。但这取决于你想做什么。我的猜测是你有一个循环从一个通道上的线程消耗,并在一些(小或大)处理后决定将其发送到另一个通道上的另一个队列(或交换)然后我没有看到任何问题那就是。虽然最好将它发送到不同的线程,但这并不是必需的。

如果您提供有关您的流程的更多详细信息,那么可能有助于提供更具体的答案。

答案 3 :(得分:0)

实际上这根本不是问题,你可以很容易地做到这一点,例如[pika][1]然而问题是你必须停止消费,因为它阻塞了循环或在消息消费期间进行生成。

消费和生产是一个正常的用例,特别是在鼠兔中,因为它不是threadsafe,例如你想要在消息上实现某种形式的过滤器,或者,或许是智能路由器,它会将消息传递给另一个队列。