Python Pika 中的非阻塞 RabbitMQ 使用者

问题描述

我之前 question 我问过在线程中运行 Python RabbitMQ(我知道它不是线程安全的),但因为我们使用的是 Quart 框架,所以不得不这样做。我一直在寻找以非阻塞方式运行兔子消费者的方法,所以我不需要线程,但我发现的示例代码不起作用和/或不可靠,所以我希望我能得到一些帮助请问我哪里出错了。

import time
import pika

def callback(channel,method,properties,body):
    print(f" [x] received {body}")

credentials = pika.PlainCredentials('example','example')
parameters = pika.ConnectionParameters('localhost',credentials=credentials)
connection = pika.BlockingConnection(parameters)

channel = connection.channel()
results_queue = channel.queue_declare(queue='processing_results_queue',durable=True)
channel.basic_consume(queue='processing_results_queue',auto_ack=True,on_message_callback=callback)

run_messaging_thread = True
while run_messaging_thread:
    if not results_queue.method.message_count == 0:
        method,body = channel.basic_get('processing_results_queue')
        print('process_scrape_result(channel,body)')

    time.sleep(0.1)

问题是,如果我发布消息,消费者在我重新启动之前不会收到它,然后它会与第 2 次及以后的正文混淆,而不是说字符串“test”。

>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...