Amazon SQS FIFO Queues



我们使用亚马逊SQS FIFO队列来处理我们应用程序的预约预订服务。一旦消息进入队列,它就会触发Amazon Lambda功能来管理预订过程。由于它是一个FIFO队列,我们确保如果两个人请求同一个插槽,则该插槽将提供给第一个请求者。我的问题是:有没有一种方法(可能是SQS FIFO队列中的设置?(可以确保一条消息在前一条消息完成执行之前不会触发Amazon Lambda函数。我只是想避免编写额外的逻辑(某种插槽锁定系统(,以确保在第一次完成"预订"过程之前,同一个插槽不会被两条背靠背的消息锁定。谢谢

以下是我解决问题的方法。

我完全不建议使用SQS,而且您的用例不需要SQS提供的任何功能。

从SQS移动到Kinesis数据流,并将批量大小设置为1以触发Lambda。Kinesis流是一个FIFO。此外,与事务FIFO SQS队列相比,Kinesis的伸缩性非常好。

Producer-->Kinesis数据流-->(Lambda触发器[批量大小到1] (Lambda

考虑到错误情况,

处理错误:

如果lambda在处理流数据时失败,检查点将继续重试,重试次数不受限制。你需要确保修正你的lambda并让它继续前进。它将继续重试的总时间等于您将数据配置为在流上可用的总时间。

Lamda中的错误:

如果你在lambda中有一个错误,并且你想从流的开头返回,你可以这样做

希望能有所帮助。

最新更新