检查SQS队列是否为空的有效方法

时间:2016-05-10 17:03:47

标签: amazon-web-services amazon-sqs

我有一个SQS Queue,多个主机可以从中读取消息。我希望在处理完队列中的所有消息后运行一些工作(业务逻辑)。

如何检查队列是否为空?

是的,我可以检查ApproximateNumberOfMessagesApproximateNumberOfMessagesNotVisible队列属性,但这些是近似数字。我想在没有消息时停止我的主机轮询队列中的消息,然后运行所需的作业。

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:2)

您可以在查看时简单地记下API响应中的空接收。关于CloudWatch,还有另一个更适合此的指标。来自documentation

  

NumberOfEmptyReceives

     

未返回消息的ReceiveMessage API调用数。

     

单位:计数

     

有效统计:平均值,最小值,最大值,总和,数据样本   (在Amazon SQS控制台中显示为样本计数)

其他一些信息:

  • 此指标仅每5分钟填充一次。如果您根据此指标设置了警报,则表示您的最短期限应为5分钟。
  • Sum是您用例的最明智的统计数据。如果NumberOfEmptyReceives> 0,您的轮询作业检查了队列并且没有收到任何消息。

我个人使用此指标来设置云观察警报,该警报会在NumberOfEmptyReceives>之后缩小承载我的投票作业的自动缩放组。 0连续几个周期。我喜欢连续一段时间,因为它更清楚地表明队列不仅是空的,而且一直是空的。

答案 1 :(得分:0)

您可以在与队列深度相关的云观察指标上触发您的发布业务逻辑。当深度为0时,您可以发送SNS通知或启动lambda函数。

此云监视指标也优于其他指标,因为这是sqs服务报告的实际消息计数。