我想以类似于标准套接字的方式使用Pika / RabbitMQ:也就是说,建立连接,然后在每次准备做更多工作时进行阻塞的同步调用以接收一条消息。< / p>
basic_get
basic_get
的{{1}}方法可以接收消息,但是如果没有消息可接收,它将立即返回。这就像禁用了阻塞的套接字BlockingConnection
调用。我可以将这种方法与超时一起使用来连续轮询,但这效率不高。
recv
basic_consume
的{{1}}方法可以完成这项工作,但是它有一个奇怪的要求,就是我basic_consume
本身必须位于线程中的其他位置。由于我的BlockingConnection
方法的调用者已经期望阻塞并等待消息,所以这似乎是在浪费线程。
Pika是否有可能做start_consuming()
的等价物?
答案 0 :(得分:0)
在自己的线程上运行Pika,并在basic_consume
上运行预取值1(如果您一次确实想要一条消息)。将消息插入您的呼叫者可以阻止的某种同步数据结构中。
请务必正确确认来自其他线程(example)的消息
注意: RabbitMQ团队监视the rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。
答案 1 :(得分:0)
使用此示例中的频道的basic_get方法:
credentials = pika.PlainCredentials('username', 'password')
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', credentials=credentials))
channel = connection.channel()
inmessage = channel.basic_get("your_queue_name", auto_ack=True)
inmessage是由3个元素组成的元组,索引为2的元素是消息的正文。