rabbitmq 取消用鼠兔食用兔肉的正确方法

sd2nnvve  于 2022-12-26  发布在  RabbitMQ
关注(0)|答案(2)|浏览(177)

我想用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 faq saysIt is not safe to share one Pika connection across threads.
取消消费的首选方式是什么?

lnxxn5zx

lnxxn5zx1#

只要您为每个线程创建一个连接,就不会有问题。
eandersson创建了一个here的示例。

2wnc66cl

2wnc66cl2#

如果要使用basic_cancel,请参见this gist
你可以看到代码简要如下:

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的参数,因此您只需将其从方法调用中删除即可。

相关问题