我想在我的批处理过程中使用RabbitMQ。 一个任务(容器)从RabbitMQ获得一条消息。然后任务(容器)完成,不再执行。
我第一次使用脚本(Docker CMD)并通过阅读以下内容获取输入。
Dockerfile:CMD /usr/bin/amqp-consume --url=$BROKER_URL -q $QUEUE -c 1 /app/worker.py
worker.py:sampleName = sys.stdin.readlines()[0]
但是,如果队列中没有消息,此方法将无限等待。
因此,我使用python脚本来消耗一条消息。
#!/usr/bin/env python
import pika
import sys
import time
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
sampleName = body
## Working script -- Start
## Working script -- End
print(" [x] Done")
ch.basic_ack(delivery_tag=method.delivery_tag)
sys.exit(1)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='task_queue', on_message_callback=callback)
channel.start_consuming()
但是我仍然有疑问。
(1)它仅消耗一条消息吗?
(2)如果队列中没有消息,如何退出脚本?
(3)完成任务后,我接受RabbitMQ。但是该任务可能需要大约7个小时。我将一次执行200多个任务。保持连接稳定吗?