我可以让 Python 脚本连续侦听消息队列还是必须循环?

Can I have a Python script listen on a message queue continuously or do I have to loop?

我的目标是编写一个 Python 脚本,当在 Azure 服务总线上收到一条消息(针对它订阅的主题)时执行一些操作。我知道如何让它检查是否有消息,但我不清楚是否建议(甚至可能)在总线上连续收听,或者我是否必须循环并每隔 x 秒检查一次新消息.

理想情况下,对于像 RabbitMQ 这样的消息队列,可以编写一个使用回调方法工作的 python 脚本,您只需订阅队列的回调方法,每当消息到达队列时,回调就会被调用你.

回调函数

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)

正在订阅队列

channel.basic_consume(callback,
                      queue='hello',
                      no_ack=True)

来源 - http://www.rabbitmq.com/tutorials/tutorial-one-python.html

但是,如果 Azure 服务总线不是同一种资源,您可以将服务总线视为等同于 Kafka,但由于它是云资源 azure 甚至任何其他云提供商都不能'提供长 运行 连接,接口相当轮询和拉取;作为一种好的做法,我建议您使用一种称为 "back off polling" 的技术,这是一个示例伪代码

currentBackoff = 0
maxBackOff = 10
while True:
    msg = Queue.getmessage()
    if msg != null:
        currentBackOff = 0
        print msg
        queue.DeleteMessage(msg)
    else:
        if currentBackOff < MaxBackOff:
            currentBackOff++
        sleep(currentBackOff)

来源 - http://www.developerfusion.com/article/120619/advanced-scenarios-with-windows-azure-queues/