【发布时间】:2017-12-19 17:59:27
【问题描述】:
是否可以在 AWS 上设置我的 SQS 队列以便只处理一次我的消息?
也许调整长/短轮询(它只会对处理产生任何影响吗?) 或 visibilityTimeout 秒, 或对我的工人申请采取一些最佳做法?
或者我应该明确地移动到 FIFO 队列以确保我只授予了一次处理?
【问题讨论】:
标签: amazon-web-services amazon-sqs
是否可以在 AWS 上设置我的 SQS 队列以便只处理一次我的消息?
也许调整长/短轮询(它只会对处理产生任何影响吗?) 或 visibilityTimeout 秒, 或对我的工人申请采取一些最佳做法?
或者我应该明确地移动到 FIFO 队列以确保我只授予了一次处理?
【问题讨论】:
标签: amazon-web-services amazon-sqs
SQS 肯定会至少处理一次消息,但有机会多次处理消息。假设您的可见性超时为 30 秒,而消费者用了 35 秒来处理消息,那么该消息将再次在队列中可供其他进程使用。如果您没有重复消息的问题并期望高吞吐量,那么 SQS 标准将是正确的选择。即使您使用短轮询或长轮询进行调整,您也不能保证您可以避免与 SQS 标准重复。
如果您需要只处理一次消息并且严格不需要任何重复,那么 FIFO 将是正确的选择。请记住,FIFO 的吞吐量不会像 SQS 标准那样高。 FIFO 队列每秒最多可支持 300 条消息
FIFO 队列旨在从不引入重复消息。但是,您的消息生产者可能会在某些情况下引入重复:例如,如果生产者发送消息,没有收到响应,然后重新发送相同的消息。 Amazon SQS API 提供重复数据删除功能,可防止您的消息生产者发送重复数据。消息生产者引入的任何重复数据都会在 5 分钟的重复数据删除间隔内删除。
请阅读更多关于 SQS 标准here
请阅读更多关于 SQS FIFO here
【讨论】: