我有一个SQS Queue
,多个主机可以从中读取消息。我希望在处理完队列中的所有消息之后运行一些作业(业务逻辑)。
如何检查队列是否为空?
可以,我可以检查ApproximateNumberOfMessages
和ApproximateNumberOfMessagesNotVisible
队列属性,但这些都是近似值。当没有剩余消息时,我想停止我的主机轮询队列中的消息,然后运行所需的作业。
有什么想法吗?谢谢
发布于 2016-05-10 17:17:30
在轮询时,您可以简单地注意到来自API响应的空接收。关于CloudWatch,还有另一个指标更适合这一点。从documentation
NumberOfEmptyReceives
未返回消息的ReceiveMessage API调用数。
单位:计数
有效统计信息: Average、Minimum、Maximum、Sum、Data Samples (在Amazon SQS控制台中显示为样本计数)
一些附加信息:
我个人使用此指标设置了一个云表警报,该警报将在连续几个周期的NumberOfEmptyReceives总和>0之后缩减托管我的轮询作业的自动伸缩组。我喜欢做连续的周期,因为它使队列不仅是空的,而且一直是空的,这一点更加明显。
发布于 2016-05-11 02:43:22
您可以在与队列深度相关的云监视指标上触发post业务逻辑。当深度为0时,您可以发送SNS通知或启动lambda函数。
此外,这个云监控指标比其他指标更好,因为这是sqs服务报告的实际消息计数。
https://stackoverflow.com/questions/37144778
复制