我有一个使用 ec2 实例上的 boto 库的 python 脚本,它是自动缩放组的一部分。该脚本处理来自 SQS 队列的消息:
import boto
from boto.sqs.message import Message
conn = boto.connect_sqs()
q = conn.create_queue('queue-name')
while (qin.count() > 0):
m = q.get_messages()
#do something with the message
使用 while 语句有意义吗?count() 是否实时更新为:
- 其他实例将消息从队列中取出(或者我要加倍)
- 新消息被添加到队列中(或者我会错过它们吗?)
即使队列为空,如何使此脚本不断侦听队列中的新增内容?
在这个问题Processing items in SQS queue with a php script中提到'sqs ruby客户端库有一个方法“poll”,它不断地轮询队列,并在队列中接收到消息时将其传递给一个块'。Python中是否有等价物?
也有人建议可以使用 SNS 来通知脚本消息队列状态,但我看不出如何使用 SNS 配置响应式系统,因为指标警报不够精细。