Python &引用;队列“声明”;从皮卡返回';无”;当通过设置“被动”进行查询时;“真的”;即使队列存在

Python &引用;队列“声明”;从皮卡返回';无”;当通过设置“被动”进行查询时;“真的”;即使队列存在,python,rabbitmq,message-queue,pika,Python,Rabbitmq,Message Queue,Pika,我正在使用pika作为消费队列“电子邮件”中数据的消费者 queue\u declarefrom pika通过设置passive=“True”查询时返回None,即使队列存在 我使用web界面创建队列“email”,我可以看到它的存在(应该由第三方创建它;我这样做只是为了测试) 现在,在我的程序中,当我打开频道时,在我开始在电子邮件队列上消费之前,我想确保队列已经存在,因此我将被动设置为真: def message(channel, envelope, properties, body):

我正在使用pika作为消费队列“电子邮件”中数据的消费者

queue\u declare
from pika通过设置
passive=“True”
查询时返回
None
,即使队列存在

我使用web界面创建队列“email”,我可以看到它的存在(应该由第三方创建它;我这样做只是为了测试)

现在,在我的程序中,当我打开频道时,在我开始在电子邮件队列上消费之前,我想确保队列已经存在,因此我将
被动
设置为

def message(channel, envelope, properties, body):
    if send(envelope.routing_key, body):
        channel.basic_ack(envelope.delivery_tag)
        return
    print("Could not send message.")

def channel_open(channel):
    QUEUES = CONFIG._defaults['queues']
    queuelist = QUEUES.split(",")
    for queuename in queuelist:
        result = channel.queue_declare(message,queue=queuename, passive=True)
        if not result:
            raise NameError("declare the queues specified "
                            "in default config section first")
        channel.basic_consume(queue=queuename, consumer_callback=message)

我在结果中得到的是“
None
”,而我希望得到一个“
ok
”,因为队列已经存在。有什么建议吗???是否因为使用web UI声明队列时未指定回调?我只想知道队列是否存在,但pika
queue\u declare
函数调用回调函数作为参数,并在未给出回调函数时发出抱怨。

您应该使用回调:

def qdeclare_callback(method_frame):
    if not method_frame: # method_frame is a result from queue_declare:
        raise NameError("declare the queues specified "
                        "in default config section first")
    # channel.basic_consume(queue=queuename, consumer_callback=message)
    channel.basic_consume(queue=method_frame.method.queue,
                          consumer_callback=message)

# ...
result = channel.queue_declare(qdeclare_callback, queue=queuename, passive=True)

查看文档中的示例:

我尝试了另一种方法(获取methodframe名称)来验证队列是否存在。。但是我没有从基本的获取方法获取任何信息。如果方法\u frame.NAME=='basic.GetEmpty':顺便说一句,这是一个异步使用者