amazon-web-services - 我如何架构师轮询以前为我提供了“已完成状态”的长时间运行的异步操作 ID 的外部 API?
问题描述
一点背景知识,我正在使用第三方 API,这个 API 为我的用户存储帐户信息。一些用户不想被存储在这个第三方服务中,当他们表示要删除他们的帐户时,我向这个外部 API 发送一个删除请求,并在返回语句中立即收到一个操作 ID。API 中的此删除请求是一个长时间运行的异步操作,可能需要不到一秒或一小时才能完成。
然后,我可以获取此操作 ID 并通过调用另一个端点来轮询 API,该端点具有我之前提供的操作 ID 以查看其完成状态(“待处理”、“已完成”等)
我应该如何使用 Amazon Web Services 来构建这个架构?理想情况下,当操作完成时,外部 API 会向我的一个 Lambda 函数抛出一个 webhook,但不幸的是,这一次不是一个选项。
解决方案
虽然对此可能有几种意见,但我会从一个 Lambda 开始,它接受操作 id 并询问远程 API 是否已完成该 id 的删除操作。
当用户请求删除时,您将以编程方式创建一个Cloudwatch 事件,该事件被设置为以任何有意义的时间间隔运行 Lambda——比如每 10 分钟一次。
Cloudwatch 事件将使用传递给 Lambda 的参数创建 - 操作 ID。每次调用 Lambda 时,都会将此操作 id 传递给 Lambda。Lambda 调用远程 API 以查看该操作 ID 的删除操作是否成功。
如果删除操作未完成,则 Lambda 将退出,稍后将由 Cloudwatch 事件再次运行。但是,如果删除操作完成,那么 Lambda 会执行成功删除所需的任何操作 - 可能会向用户发送一封电子邮件,告诉他们删除工作或使用状态更新数据库。但另一个重要部分是删除触发 Lambda 的 Cloudwatch 事件,这样它就不会继续轮询删除操作。
Lambda 并非微不足道,因为当删除成功时它有很多事情要做。有些人甚至可能将成功删除的操作拆分到其他 Lambda 中。这是您的电话,并且在某种程度上取决于您能够处理多少devops。
推荐阅读
- excel - 粘贴但保留目标格式
- highcharts - Highcharts:次轴的负值应低于 x 轴
- html - Highchart 树节点文本溢出
- swift - 当默认模式兼容所有类别时,AVAudioSession 中的其他模式有什么用?
- c++ - 将结构内的数组从 Cpp 写入 QML
- angular - 是否可以在 Angular 中覆盖 MatIconRegistry 中的 HttpClient?
- linux - NGINX - 忽略 js 和 css 文件上的获取参数
- javascript - Redux dispatch 没有正确更新状态
- php - 用 HTML 将所有表情符号包装在一个字符串中?
- python-3.x - 在 wxpython 中的某个点一个接一个地显示位图与它们重叠并且不显示其余部分