AWS SQS 消息保留期

Posted

技术标签:

【中文标题】AWS SQS 消息保留期【英文标题】:AWS SQS message retention period 【发布时间】:2018-02-11 07:51:21 【问题描述】:

根据documentation,最长SQS 消息保留期(MessageRetentionPeriod) 为14 天。在那之后,消息将从队列中删除。

SQS 有什么方法可以在保留期到期后不丢失这些消息?比如不清楚或者是否可以为此使用死信队列?

【问题讨论】:

我很好奇为什么这对你来说是个问题。消息队列通常不会在队列中保留消息数小时,更不用说几天了。 我有数百万个批处理任务,估计需要1-2个月,我还需要在14天后将消息排队! 【参考方案1】:

14 天是您可以保留消息的最长期限。 14 天后,您可以将该消息移至 S3 存储桶进行备份。您还可以使用 DLQ 进行 hack。

这是一个快速技巧,您可以将消息发送回主队列。这绝对不是最佳或推荐的选择。

    将主 SQS 队列设置为具有最大值的实际 DLQ 的 DLQ 接收为 1。 在 DLQ 中查看内容(这会将消息移动到主 队列,因为这是实际 DLQ 的 DLQ) 删除设置,使主队列不再是 实际 DLQ

【讨论】:

感谢您的回答。还有一个问题 - S3 Bucket 将以什么形式备份消息?这是一个自动过程吗? 不,它不是自动的,您必须使用 Cli 来自动化并将消息从 SQS 移动到 S3 但是来自 AWS 文档的 AFAIK,这些消息将被删除,那么在保留期到期后如何备份它们? @alexanoid 您可以使用轮询的 Lambda 函数来检查 DLQ 并将数据备份到 S3 存储桶中。 这将如何增加保留期?以下是 AWS 文档 The expiration of a message is always based on its original enqueue timestamp. When a message is moved to a dead-letter queue, the enqueue timestamp remains unchanged. For example, if a message spends 1 day in the original queue before being moved to a dead-letter queue, and the retention period of the dl queue is set to 4 days, the message is deleted from the dl queue after 3 days. . source - docs.aws.amazon.com/AWSSimpleQueueService/latest/… 中所写的内容

以上是关于AWS SQS 消息保留期的主要内容,如果未能解决你的问题,请参考以下文章

Amazon SQS 可见性超时

AWS Lambda 在向 SQS 发送消息之前完成

AWS SQS FIFO或AWS DynamoDB用于处理大量消息

配置 Zipkin 以跟踪 AWS SQS 消息?

从 AWS SQS 获取消息的延迟

当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数