我有一个SQS Queue
,多个主机可以从中读取消息。我希望在处理完队列中的所有消息后运行一些工作(业务逻辑)。
如何检查队列是否为空?
是的,我可以检查ApproximateNumberOfMessages
和ApproximateNumberOfMessagesNotVisible
队列属性,但这些是近似数字。我想在没有消息时停止我的主机轮询队列中的消息,然后运行所需的作业。
有什么想法吗?感谢
答案 0 :(得分:2)
您可以在查看时简单地记下API响应中的空接收。关于CloudWatch,还有另一个更适合此的指标。来自documentation:
NumberOfEmptyReceives
未返回消息的ReceiveMessage API调用数。
单位:计数
有效统计:平均值,最小值,最大值,总和,数据样本 (在Amazon SQS控制台中显示为样本计数)
其他一些信息:
我个人使用此指标来设置云观察警报,该警报会在NumberOfEmptyReceives>之后缩小承载我的投票作业的自动缩放组。 0连续几个周期。我喜欢连续一段时间,因为它更清楚地表明队列不仅是空的,而且一直是空的。
答案 1 :(得分:0)
您可以在与队列深度相关的云观察指标上触发您的发布业务逻辑。当深度为0时,您可以发送SNS通知或启动lambda函数。
此云监视指标也优于其他指标,因为这是sqs服务报告的实际消息计数。