gpt4 book ai didi

python - 鼠兔的 "queue_declare"在通过设置 passive='None"查询时返回 "True",即使队列存在

转载 作者:行者123 更新时间:2023-11-28 17:41:58 25 4
gpt4 key购买 nike

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

queue_declare 来自鼠兔的返回 None 当通过设置 passive="True" 查询时,即使队列存在。

我使用 Web 界面创建队列“电子邮件”,我可以看到它存在(第三方应该创建它;我这样做只是为了测试)。

现在在我的程序中,当我打开 channel 并开始使用电子邮件队列之前,我想确保队列已经存在,所以我将 passive 设置为 True :

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_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)

从文档中查看此示例:http://pika.readthedocs.org/en/latest/examples/asynchronous_consumer_example.html

关于python - 鼠兔的 "queue_declare"在通过设置 passive='None"查询时返回 "True",即使队列存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22992073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com