我想在 Python 中创建一个 RabbitMQ 接收器/消费者,但不知道如何检查消息。我正在尝试在自己的循环中执行此操作,而不是使用 pika 中的回调。
如果我理解了一些事情,我可以在 Java 客户端getBasic()
中检查是否有任何消息可用而不会阻塞。我不介意在收到消息时阻止,但我不想在有消息之前阻止。
我没有找到任何明确的例子,也没有弄清楚 pika 中的相应调用。
如果你想同步做,那么你需要看看 pikaBlockingConnection
BlockingConnection 在 Pika 的异步核心提供方法之上创建了一个层,该层将阻塞,直到它们的预期响应返回。由于从 RabbitMQ 到应用程序的 Basic.Deliver 和 Basic.Return 调用的异步性质,如果您想使用 basic_consume 接收来自 RabbitMQ 的消息,或者如果您想要使用 basic_publish 时收到传送失败通知。
更多信息和示例在这里
https://pika.readthedocs.org/en/0.9.12/connecting.html#blockingconnection
您可以使用此答案的示例定期检查队列大小Get Queue Size in Pika (AMQP Python)
队列处理循环可以在以下帮助下迭代完成process_data_events()
:
import pika
# A stubborn callback that still wants to be in the code.
def mq_callback(ch, method, properties, body):
print(" Received: %r" % body)
connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel()
queue_state = channel.queue_declare(queue="test")
# Configure a callback.
channel.basic_consume(mq_callback, queue="test")
try:
# My own loop here:
while(True):
# Do other processing
# Process message queue events, returning as soon as possible.
# Issues mq_callback() when applicable.
connection.process_data_events(time_limit=0)
finally:
connection.close()