在 SQS 中,延迟队列消息是否算作“正在运行”?

2023-12-30

我正在开发一个项目,我打算在其中使用Amazon SQS 延迟队列 http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html.

我在理解“飞行中”消息的确切含义时遇到了一些困难。

文档中有一条注释说:

Note

每个传输消息的数量限制为 120,000 条 队列。消息被接收后正在传输中 队列,但尚未从队列中删除。如果您达到 120,000 限制,您将收到来自亚马逊的 OverLimit 错误消息 SQS。为了避免达到限制,您应该删除消息 处理完后从队列中取出。您还可以增加 用于处理消息的队列数量。

但我不完全确定什么被认为是“队列接收”。在流程图中,队列在哪里“接收”消息?

我会故意延迟很多消息(在图表的第一个蓝色条中),但在“可见性超时”阶段(第二个蓝色条)不会有很多消息。

两个蓝色条都算作“飞行中”消息吗?或者消息仅在被“接收”后才“传输”ReceiveMessage请求(位于图表底部“消息已返回”右侧)?


放入延迟队列的消息不会立即被计为“正在传输”,因为它们对任何消费者都是不可见的。它们不被视为“可用”或“飞行中”,只是您看不到它们。

您可以通过 AWS SQS 控制台上的简单实验来验证这一点:

  • 创建延迟队列,并向 SQS 控制台打开两个选项卡。
  • 通过右键单击队列并选择“发送消息”,将多条消息放入延迟队列中 - 您应该注意到,在延迟到期之前,这些消息不会被计为“可用”或“正在发送”,此时它们将变为“可用的。”

正如文档所述,消息在收到后(当它们由某些应用程序处理时)但在被删除之前处于“飞行中”状态。如果应用程序处理完后未删除它们,它们将返回“可用”状态。

您可以通过 AWS SQS 控制台上的第二个实验来验证这一点:

  • 打开 AWS SQS 控制台的两个选项卡。在延迟队列中创建一些消息并等待它们变得可用。
  • 在第一个选项卡中,右键单击队列并选择“查看/删除消息”。在此实验中,“查看/删除消息”对话框与您的应用程序类似——它在查看队列消息时处理队列消息。将“消息轮询队列”文本字段设置为足够长的持续时间并开始轮询消息。如果您的消息可用,它们应该立即显示。
  • 在第二个选项卡中,刷新 SQS 控制台。您应该注意到这些消息现在处于“传输中”状态,因为当您在其他选项卡中查看消息时已收到这些消息。

由于“运行中”消息是应用程序当前正在处理的消息,因此该列中的队列消息深度实际上不应增长得很大。处理完消息后删除它们(或者重试->适当处理然后删除/移动到另一个队列以处理异常),你应该没问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQS 中,延迟队列消息是否算作“正在运行”? 的相关文章

随机推荐