正确取消pika的rabbitmq消费方式
我想用RabbitMQ实现一个RPC客户端。我的代码大致是这样的:
def start(self):
while True:
self.channel.basic_consume(self.on_delivery)
...
client.start() // blocking call
那么,停止这个客户端的正确方法是什么呢?现在我是在另一个线程中调用 channel.basic_cancel(self.on_cancel, self.consumer_tag)
。不过,pika的常见问题解答里说 在多个线程之间共享一个Pika连接是不安全的。
那么,取消消费的推荐方法是什么呢?
2 个回答
0
如果你想使用 basic_cancel
,可以看看 这个链接
你可以简单地看到下面的代码:
def callback(ct, ch, method, properties, body):
...
ch.basic_cancel(consumer_tag=ct, nowait=False) # WARNING no such parameter `nowait` please remove from method call
...
...
consumer_tag = uuid.uuid1().hex
channel.basic_consume(partial(callback, consumer_tag),
queue=queue_name,
consumer_tag=consumer_tag) # add consumer_tag
...
在 pika@1.3.3 版本中,没有叫 nowait
的参数,所以你只需要把它从方法调用中去掉就可以了。
2
只要你为每个线程创建一个连接,就没问题了。
eandersson在这里提供了一个例子。