从 AWS SQS 获取消息的延迟
Posted
技术标签:
【中文标题】从 AWS SQS 获取消息的延迟【英文标题】:Delay in getting messages from AWS SQS 【发布时间】:2021-10-11 08:54:05 【问题描述】:我在 Lambda 上的 SQS 中添加消息,然后在 ECS 上的容器内接收消息。 问题是当我在容器上接收消息时会有 10-15 秒的延迟。
在容器上,我每 1 秒无限期地运行一个循环,在该循环中我正在获取消息并在可用时对其进行处理。
示例: 假设消息在 15:20:00 添加到 SQS,但我能够在 ECS 上的 15:20:15 获取该消息。这 15 秒对我的用例来说太长了。
这个时间可以减少吗? 假设有多个生产者和消费者,是否有任何替代解决方案?
【问题讨论】:
队列中是否还有其他消息,或者是唯一的消息?如果还有其他消息,则容器中的工作人员可能很忙并且没有请求所有消息。 不,SQS 中只有 1 条消息。我用多条消息尝试了这个,也只有一条消息,行为是一样的。 Amazon SQS 中的消息在发送后立即可用。您的工作人员没有正确检索消息,或者它可能是一个 FIFO 队列,并且正在处理具有相同 MessageGroupId 的另一条消息。 我使用的是标准队列。您能说出针对此问题检索消息的正确方法吗? 接收消息的唯一方法是致电ReceiveMessage()
。我建议您进行一些日志记录,以准确查看工作人员何时以及多久调用一次ReceiveMessage()
。一种有效的方法是将WaitTimeSeconds=20
指定为参数,这将导致请求“等待”最多20 秒,然后返回空结果。这减少了不断轮询队列的需要。
【参考方案1】:
如果您的工作人员不断轮询 Amazon SQS 队列,他们可以通过指定 WaitTimeSeconds=20
(这是其最大值)来减少请求数量。
这告诉 Amazon SQS 等待至少一条消息可用,最多等待 20 秒。如果 20 秒后没有消息可用,则返回一组空消息。但是,如果队列中出现一条或多条消息,则调用立即返回,无需等待 20 秒。
这会降低对 SQS 的调用频率,并可能提高您应用程序的稳定性。
【讨论】:
以上是关于从 AWS SQS 获取消息的延迟的主要内容,如果未能解决你的问题,请参考以下文章