SQS Lambda消费者和过滤器存在可能的错误吗?

0

【以下的问题经过翻译处理】 我已经配置了一个带有Lambda消费者的队列。Lambda触发器配置了一个过滤器,以仅处理队列中的某些消息:

"FilterCriteria": {
  "Filters": [
    {
      "Pattern": "{\"body\":{\"action\":[\"sample1\"]}}"
    }
  ]
}

当向队列发送匹配过滤器的消息时,没有问题,消息会被lambda函数消费并从队列中移除。

当发送不匹配过滤器{"action":"testing"}的消息时,消息不会被lambda函数消费(这是预期的),但消息会从队列中删除,不再可用于任何其他消费者。

当我们为Lambda函数配置maxConcurrency,情况会变得更糟:Lambda会消费部分消息,而一些消息(匹配过滤器)不会被消费,但仍会在SQS中被删除。

我是遇到了一个bug,还是对过滤器的工作方式存在误解?

profile picture
專家
已提問 5 個月前檢視次數 28 次
1 個回答
0

【以下的回答经过翻译处理】 首先,让我们了解一下 lambda 事件过滤器的设计初衷并不是多次过滤相同的消息,在每次成功的单次/批量调用后,消息都会被清除,除非您在处理突然出现的错误时显式地删除它们。

这样做是为了避免再次处理不匹配的消息,而且这样做可能会堵塞批量大小,导致 lambda 过滤器无休止地运行,无法在头部找到合适的记录进行处理。

你可能会问,我们为什么要使用这个过滤器,这是为了确保我们处理的是正确的消息以节省我们的计算时间和空间。因为 SQS 本身无法过滤。

此外,SQS 更适合于一个消费者类型的架构,如果你想有另一个消费者,最好有多个 SQS 队列。

要拥有单独的队列,您可以初始化创建一个具有相同payload的Event Bridge事件,然后使用Event Bridge规则 将消息移至正确的 SQS,并使用过滤模式和单次/批量调用策略。

profile picture
專家
已回答 5 個月前

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南