【问题标题】:Is it possible to set up SQS standard queue to be sure to process only once my messages?是否可以设置 SQS 标准队列以确保只处理一次我的消息?
【发布时间】:2017-12-19 17:59:27
【问题描述】:

是否可以在 AWS 上设置我的 SQS 队列以便只处理一次我的消息?

也许调整长/短轮询(它只会对处理产生任何影响吗?) 或 visibilityTimeout 秒, 或对我的工人申请采取一些最佳做法?

或者我应该明确地移动到 FIFO 队列以确保我只授予了一次处理?

【问题讨论】:

    标签: amazon-web-services amazon-sqs


    【解决方案1】:

    SQS 肯定会至少处理一次消息,但有机会多次处理消息。假设您的可见性超时为 30 秒,而消费者用了 35 秒来处理消息,那么该消息将再次在队列中可供其他进程使用。如果您没有重复消息的问题并期望高吞吐量,那么 SQS 标准将是正确的选择。即使您使用短轮询或长轮询进行调整,您也不能保证您可以避免与 SQS 标准重复。

    如果您需要只处理一次消息并且严格不需要任何重复,那么 FIFO 将是正确的选择。请记住,FIFO 的吞吐量不会像 SQS 标准那样高。 FIFO 队列每秒最多可支持 300 条消息

    FIFO 队列旨在从不引入重复消息。但是,您的消息生产者可能会在某些情况下引入重复:例如,如果生产者发送消息,没有收到响应,然后重新发送相同的消息。 Amazon SQS API 提供重复数据删除功能,可防止您的消息生产者发送重复数据。消息生产者引入的任何重复数据都会在 5 分钟的重复数据删除间隔内删除。

    请阅读更多关于 SQS 标准here

    请阅读更多关于 SQS FIFO here

    【讨论】:

    • 谢谢,您的回答证实了我从 aws doc 中阅读的内容。是的,我只需要处理一次味精。所以你认为可见性超时用例是唯一的机会有重复?还是有其他可能性有重复?如何将超时增加到比最坏处理情况更长的安全时间? (不能确保但尽量减少问题)
    • @koalaok 可见时间是用例之一。如果您只需要处理一次,那么盲目地选择 SQS FIFO。我在答案部分更新了一些关于 FIFO 队列的信息。
    • "...如果生产者发送消息,没有收到响应,然后重新发送相同的消息.." 为什么会发生这种情况? SQS 应该是分布式的和高可用性的......网络问题?无论如何,这不应该是我的情况。
    • 这就是生产者-消费者模型或消息代理的工作方式。生产者必须确保消息已被传递以进行可靠的通信。为了确保消息正确传递,生产者需要消费者的确认。这与我们在现实世界中确认一封重要邮件完全相同
    • 它回答了你的问题吗?
    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多