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

rig*_*der 10 amazon-sqs amazon-web-services

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

如何检查队列是否为空?

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

有任何想法吗?谢谢

Ant*_*ace 6

您可以在轮询时简单地注意到来自 API 响应的空接收。关于 CloudWatch,还有另一个指标更适合于此。从文档

空接收数

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

单位:计数

有效统计数据:Average、Minimum、Maximum、Sum、Data Samples(在 Amazon SQS 控制台中显示为样本计数)

一些额外的信息:

  • 此指标仅每 5 分钟填充一次。如果您根据此指标设置闹钟,这意味着您的最短时间应为 5 分钟。
  • Sum 是最适合您的用例的统计数据。如果 NumberOfEmptyReceives > 0,您的轮询作业会检查队列并且未收到任何消息。

我个人使用这个指标来设置一个 cloudwatch 警报,该警报将在连续几个时期的 NumberOfEmptyReceives > 0 的总和之后缩小托管我的轮询作业的自动缩放组。我喜欢做连续的周期,因为它更明显地表明队列不仅是空的,而且一直是空的。