Подтвердить что ты не робот

RabbitMQ потребляет одно сообщение, если оно существует, и завершает работу

Я запускаю код на python для отправки и получения из очереди RabbitMQ из другого приложения, где я не могу разрешить потоки. Это очень новичок вопрос, но есть ли возможность просто проверить, есть ли сообщение, а если нет, то просто прекратите слушать? Как мне изменить основной пример "Hello world" для такой задачи? В настоящее время мне удалось прекратить потребление, если я получаю сообщение, но если сообщений нет, мой метод receive() просто продолжит ждать. Как заставить его не ждать, если нет сообщений? Или, может быть, подождите только за определенное количество времени?

import pika

global answer

def send(msg):
    connection = pika.BlockingConnection(pika.ConnectionParameters())
    channel = connection.channel()
    channel.queue_declare(queue='toJ')
    channel.basic_publish(exchange='', routing_key='toJ', body=msg)
    connection.close()

def receive():
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
    channel = connection.channel()
    channel.queue_declare(queue='toM')
    channel.basic_consume(callback, queue='toM', no_ack=True)
    global answer
    return answer

def callback(ch, method, properties, body):
    ch.stop_consuming()
    global answer
    answer = body
4b9b3361

Ответ 1

Хорошо, я нашел следующее решение:

def receive():
    parameters = pika.ConnectionParameters(RabbitMQ_server)
    connection = pika.BlockingConnection(parameters)
    channel = connection.channel()
    channel.queue_declare(queue='toM')
    method_frame, header_frame, body = channel.basic_get(queue = 'toM')        
    if method_frame.NAME == 'Basic.GetEmpty':
        connection.close()
        return ''
    else:            
        channel.basic_ack(delivery_tag=method_frame.delivery_tag)
        connection.close() 
        return body