【发布时间】:2018-09-06 01:35:27
【问题描述】:
我正在使用kombu 来使用来自多个队列的rabbitmq 消息。对于任何给定的消息,是否可以确定哪个队列传递了它?
【问题讨论】:
我正在使用kombu 来使用来自多个队列的rabbitmq 消息。对于任何给定的消息,是否可以确定哪个队列传递了它?
【问题讨论】:
使用kombu 可以根据消息源自的队列进行区分(也很简单)。您只需通过以下方式获取队列名称:
print message.properties.get('user_id','no user id in message')
在消费者端。 https://adam.younglogic.com/2016/03/id-message-sender-kombu/ 上提供了更深入的教程
【讨论】:
据我所知,没有直接的方法可以访问在 kombu 中接收消息的队列的名称。 proposed solution by Philip 不够通用,并且奇怪地依赖于发布调用中指定的 user_id。这带来了两个问题:
我们在使用 ConsumerMixin 时确定了两种可能的解决方案:
使用Python偏函数包装Consumer回调函数并传递队列名:
con = Consumer(queue=queue, callback=[partial(self.callback, queue_name=queue.name)])
...
def callback(self, body, message, queue_name):
这些解决方案都不是特别优雅。如果 kombu 只包含对接收消息的队列的引用以及发送到消费者回调的消息,那会更好。
【讨论】: