我有一个 SQS Queue
多个主机从中读取消息。我想在处理完队列中的所有消息后运行一些作业(业务逻辑)。
如何检查队列是否为空?
是的,我可以查询 ApproximateNumberOfMessages
和 ApproximateNumberOfMessagesNotVisible
队列属性,但这些是近似数字。我想在没有消息时停止我的主机轮询队列中的消息,然后运行所需的作业。
有任何想法吗?谢谢
最佳答案
您可以在轮询时简单地注意到来自 API 响应的空接收。关于 CloudWatch,还有另一个指标更适合于此。来自 documentation :
NumberOfEmptyReceives
The number of ReceiveMessage API calls that did not return a message.
Units: Count
Valid Statistics: Average, Minimum, Maximum, Sum, Data Samples (displays as Sample Count in the Amazon SQS console)
一些额外的信息:
我个人使用这个指标来设置一个 cloudwatch 警报,该警报将在连续几个时期的 NumberOfEmptyReceives > 0 的总和之后缩小托管我的轮询作业的自动缩放组。我喜欢做连续的周期,因为它更明显地表明队列不仅是空的,而且一直是空的。
关于amazon-web-services - 检查SQS队列是否为空的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37144778/