我们正在使用AMAZON SQS FIFO队列来处理我们应用程序的约会预约服务。消息进入队列后,它将触发Amazon Lambda函数来管理预订过程。由于这是一个FIFO队列,因此我们确保如果2个人请求相同的插槽,则该插槽将分配给第一个请求者。我的问题是:有没有办法(可能是SQS FIFO队列中的设置?)确保一条消息在上一条消息执行完毕之前不会触发Amazon Lambda函数。我只是想避免需要编写其他逻辑(某种插槽锁定系统)以确保在第一次完成“预订”过程之前,没有2条背对背消息将同一插槽作为目标。谢谢。
答案 0 :(得分:2)
这是我解决问题的方式。
我将完全不建议使用SQS ,并且您不需要用例中SQS提供的任何功能。
从SQS移至 Kinesis Data Streams,并将批次大小设置为1 以触发Lambda。那会解决的。 Kinesis流是一个FIFO。与交易FIFO SQS队列相比, Kinesis的伸缩性很好。
生产者-> Kinesis数据流->(Lambda触发器[批量大小为 1])Lambda
考虑错误情况,
处理错误:
如果您的lambda在处理流数据时失败,则您的检查点将继续重试,并且重试次数不受限制。您需要确保修复lambda并使它向前发展。它将保持重试的总时间等于您配置数据在流上可用的总时间。
在Lamda中的错误:
如果您在lambda中有错误,并且想要从流的开头返回,则可以这样做。
希望有帮助。