У меня есть потребитель RabbitMQ. Я бы хотел, чтобы этот потребитель выполнил некоторую обработку сообщений, смоделированную time.sleep(10)
, а затем опубликовал sh сообщение в другой очереди. Я знаю, что обратный вызов потребителя имеет канал, который теоретически может быть использован для публикации sh, но это кажется плохой реализацией, потому что если basic_publish()
каким-то образом удастся принудительно закрыть канал, то потребитель умрет. Каков наилучший способ справиться с этим?
import time
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='logs', exchange_type='fanout')
result = channel.queue_declare(queue='original_queue', exclusive=True)
channel.queue_bind(exchange='logs', queue='original_queue')
print(' [*] Waiting for logs. To exit press CTRL+C')
def callback(ch, method, properties, body):
time.sleep(10)
ch.basic_publish(exchange='logs', routing_key='different_queue', body='hello_world')
channel.basic_consume(
queue='original_queue', on_message_callback=callback, auto_ack=True)
channel.start_consuming()