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

Amazon web services 检查SQS队列是否为空的有效方法,amazon-web-services,amazon-sqs,Amazon Web Services,Amazon Sqs,我有一个SQS队列,多个主机从中读取消息。我想在处理完队列中的所有消息后运行一些作业(业务逻辑) 如何检查队列是否为空 是的,我可以检查approximateEnumberOfMessages和approximateEnumberOfMessagesNotVisible队列属性,但这些是近似数字。当队列中没有剩余消息时,我想停止主机轮询队列中的消息,然后运行所需的作业 有什么想法吗?谢谢您可以在轮询时简单地注意到来自API响应的空接收。关于CloudWatch,还有一个指标更适合于此。从: 空接

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

如何检查队列是否为空

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


有什么想法吗?谢谢

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

空接收数

未返回消息的ReceiveMessage API调用数

单位:计数

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

其他一些信息:

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

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

您可以在与队列深度相关的cloud watch度量上触发您的后期业务逻辑。当深度为0时,您可以发送SNS通知或启动lambda函数


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

您好,我现在使用的是
ReceiveMessageRequest
approximateEnumberOfMessages
approximateEnumberOfMessagesNotVisible
的输出组合以及长轮询来确定队列是否为空。如果
ReceiveMessageRequest
的结果为
null
和&
approximateEnumberOfMessages==0
和&
approximateEnumberOfMessagesNotVisible==0
,那么我可以确保队列中没有消息了吗?这样想吧
ApproximateEnumberOfMessagesNotVisible
对此可能不是非常有用;在同一个实例CloudWatch示例中可能有消息正在传输,并为队列深度提供误报。对于cloudwatch指标,请确保在几个时段内进行采样,以验证队列实际上是空的,并且不仅仅是fluke或cloudwatch服务错误。