我想用Python创建一个RabbitMQ接收器/消费者,我不知道如何检查消息。我试图在我自己的循环中执行此操作,而不是使用pika中的回调。
如果我理解了什么,在Java客户端中我可以使用getBasic()
检查是否有任何消息可用而没有阻塞。我不介意在收到邮件时阻止,但我不想在收到消息之前阻止。
我没有找到任何明确的例子,还没有找到pika中的相应电话。
答案 0 :(得分:1)
如果您想同步进行,那么您需要查看鼠标BlockingConnection
BlockingConnection在Pika的异步之上创建一个图层 核心提供方法将阻止它们的预期响应 已经回来了。由于Basic.Deliver和。的异步性质 Basic.Return从RabbitMQ调用到你的应用程序,你仍然是 需要实现延续传递样式的异步方法 如果你想使用basic_consume或者来自RabbitMQ的消息 如果您希望在使用时收到交付失败的通知 basic_publish。
更多信息和示例
https://pika.readthedocs.org/en/0.9.12/connecting.html#blockingconnection
答案 1 :(得分:1)
答案 2 :(得分:1)
队列处理循环可以在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()