Python RPC如何实现单个消费者消费多个队列?

问题是这样的:客户端需要在五个不同的消息队里中发送消息,服务端在五个队列中收到消息后调用不同的函数。

我在服务端中声明了同时声明了五个队列,但是在主线程中同时监听该五个队列时,其余的四个队列被阻塞,只能监听一个队列。

于是我使用多线程 让每个线程监听一个队列:

    def bind_exchange_to_queue(self,api_name):
        self.result = self.channel.queue_declare(queue=self.queue_name.format(api_name))
        self.channel.exchange_declare(
            exchange=self.exchange_name,
            exchange_type='topic',
            auto_delete=True,
        )
        self.channel.queue_bind(
            exchange = self.exchange_name,
            queue = self.queue_name.format(api_name),
            routing_key = self.routing_key.format(api_name)
        )
        self.channel.basic_consume(self.on_request, queue=self.queue_name.format(api_name))
        self.channel.start_consuming()
        
        ...
    def called(self):
    threads = []
    for api_name in self.api_name_list:
        t = threading.Thread(target=self.bind_exchange_to_queue, args=(api_name,))
        t.setDaemon(True)  # 设置线程为后台线程
        t.start()
        threads.append(t)
    self.channel.basic_consume(self.on_request,queue=self.queue_name.format(api_name))
    self.channel.start_consuming()

    t.join()

但是却报下面的错:

图片描述

请问有什么正确的方法可以解决?!

阅读 2.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题