我如何只消耗RabbitMQ(Python)中的1条消息

时间:2020-06-02 19:03:02

标签: python rabbitmq

我想在我的批处理过程中使用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多个任务。保持连接稳定吗?

0 个答案:

没有答案
相关问题