aws-lambda - 使用 API Gateway 依次调用 1 个 AWS Lambda
问题描述
我知道有一个标题相同的问题,但我的问题有点不同:我有一个 Lambda API - saveInputAPI() 来将值保存到指定的字段中。用户可以使用不同的参数调用此 API,例如:
saveInput({"adressType",1}); //adressType is a DB field.
或者
saveInput({"name","test"}) //name is a DB field.
当然,这个托管在 AWS 上,所以我也使用 API Gateway。但问题是有时会发生这样的错误:
如你看到的。第 19 号 API 先被调用,但后来完成
(10:10:16:828) -> (10:10:18:060)
虽然 API No.18 稍后被调用但完成得更快......
(10:10:17:611) -> (10:10:17:861)
这导致我的项目出现很多问题。有时,2 个 API 之间的延迟长达 10 秒。前端项目独立运行,因此用户不知道后面发生了什么。他们认为他们已经将 addressType 设置为 1,但实际上,addressType 仍然是 2。由于这个项目很大,我无法更改这种 [仅使用 1 个 API 更新 DB 值] 的设计。我有什么办法可以解决这个问题吗??真的很感激任何想法。谢谢
解决方案
如果上次更新的时间戳比源事件时间戳更新,则无法跳过对数据库的更新,我们需要将 Api Gateway 和 Lambda 解耦。
- Api Gateway 写入SQS FIFO Queue。
- Lambda 使用 SQS 并处理请求。
这将确保首先处理较旧的事件。
推荐阅读
- xamarin.android - 无法使用 Mvvm Model xamarin 实现 YouTube Android Player API
- angular - Angular 6 导航列表项
- javascript - 当容器有右滚动条时,Flex 项目宽度在 IE11 中不起作用
- java - 在 ionic 中构建 Android 失败,transformClassesWithDexBuilderForDebug 进程 okhttp-3.13.1.jar
- mysql - 在 MySQL 中将表从 utf8 更新为 utf8mb4 是否安全?
- visual-studio-code - 无法在片段中获得建议
- javascript - Firebase Cloud Messaging - 在发送通知之前获取数据?
- opencv - 有没有任何方法可以在不从 Unity 资产商店购买 EmguCV 包的情况下将 EmguCV 与 Unity 一起用于 UWP(HoloLens)应用程序开发?
- javascript - 通过特殊字符从字符串中查找并提取序列
- angular - 本机脚本 DatePicker 显示错误的月份值