【问题标题】:AWS SQS Reprocessing Inflight MessagesAWS SQS 重新处理正在进行的消息
【发布时间】:2018-12-04 12:02:33
【问题描述】:

我有一个文件阅读器,可以将 CSV 的每一行放入 SQS;订阅了一个 .Net lambda 函数以接收每一行并单独处理。

当一个项目完成处理(大约 1-3 秒)后,它会从队列中删除。

处理完一行后,它会将数据包发送到系统的另一个区域,但我在日志中看到的是我们正在从函数接收重复的数据包。

由于 lambda 函数同时运行;我的工作理论是,当一个函数可用于消费另一个项目时,队列项目仍在运行中 - 因此它会消费一个已经被处理的项目。

由于删除操作最后发生,我的解决方案是将删除操作移到函数的开头。

但是我担心这是否合理,好像函数在处理过程中挂起或超时,我们将完全丢失数据包。另外,如果我从队列中删除该项目;一旦解析了消息中的数据,该函数是否能够继续?

所以我的问题分为两部分

  1. 订阅 SQS 的 lambda 函数是否可以 收到飞行中的消息,而另一个相同的实例 函数已经在处理它了吗?
  2. 是否存在任何潜在问题 选择功能后,我立即删除队列项目 起来

【问题讨论】:

    标签: .net amazon-web-services .net-core amazon-sqs


    【解决方案1】:

    尽量避免这样的解决方案。由于 lambda 的 5 分钟限制,您的函数可能会抛出异常或被杀死,并且您将丢失消息

    相反,我会尝试根据您的函数处理消息(或消息)所需的时间来调整可见性超时。 另一方面,您可以减少听众每次阅读的消息数量(默认为 10)。 因此,它将减少处理的总时间,并且处理时间将小于 visibilityTimeout (或默认超时) 如果您无法预测需要多少时间来处理消息,您可以在收到消息后调整(延长)visibilityTimeout。

    https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html

    【讨论】:

    • 谢谢,我会调查一下可见性超时,这是我没有考虑过的。标记为答案:)
    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2019-02-02
    相关资源
    最近更新 更多