我正在使用kombu消耗来自多个队列的Rabbitmq消息。对于任何给定的消息,是否可以确定哪个队列传递了它?
答案 0 :(得分:0)
有可能(而且很简单)根据使用kombu
发出消息的队列进行区分。您只需要通过以下方法获取队列名称:
print message.properties.get('user_id','no user id in message')
在消费者端。在https://adam.younglogic.com/2016/03/id-message-sender-kombu/
上可以找到更详细的教程。答案 1 :(得分:0)
据我所知,没有直接方法可以访问在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仅包含对收到消息的队列的引用以及发送给Consumer回调的Message。