我正在使用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时确定了两种可能的解决方案:
con = Consumer(queue=queue, callback=[partial(self.callback, queue_name=queue.name)])
...
def callback(self, body, message, queue_name):
这些解决方案都不是特别优雅。如果kombu只是包含对收到消息的队列的引用以及发送给Consumer回调的Message的话,那就更好了。