2

我想在 Python 中创建一个 RabbitMQ 接收器/消费者,但不知道如何检查消息。我正在尝试在自己的循环中执行此操作,而不是使用 pika 中的回调。

如果我理解了一些事情,我可以在 Java 客户端getBasic()中检查是否有任何消息可用而不会阻塞。我不介意在收到消息时阻止,但我不想在有消息之前阻止。

我没有找到任何明确的例子,也没有弄清楚 pika 中的相应调用。

4

3 回答 3

1

如果你想同步做,那么你需要看看 pikaBlockingConnection

BlockingConnection 在 Pika 的异步核心提供方法之上创建了一个层,该层将阻塞,直到它们的预期响应返回。由于从 RabbitMQ 到应用程序的 Basic.Deliver 和 Basic.Return 调用的异步性质,如果您想使用 basic_consume 接收来自 RabbitMQ 的消息,或者如果您想要使用 basic_publish 时收到传送失败通知。

更多信息和示例在这里

https://pika.readthedocs.org/en/0.9.12/connecting.html#blockingconnection

于 2013-02-28T15:43:15.357 回答
1

您可以使用此答案的示例定期检查队列大小Get Queue Size in Pika (AMQP Python)

于 2014-12-16T08:50:14.047 回答
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()
于 2016-12-10T21:31:06.767 回答