使用由 Lambda 函数支持的 API 网关,它使用 SNS 在微服务之间进行通信
Using API Gateway backed by Lambda Functions which communicate between Microservices using SNS
简而言之,我对构建通过 SNS(大部分)连接的松耦合微服务感兴趣,以便实时处理 API 请求。
前提
- 需要所有这些都发生在单个 POST 请求响应正文中
- 无法请求客户端拉取成功上传and/or路由成功
AWS API 网关端点
- POST /api/documents/uploadAndRouteDownWorkflow,执行 documents.upload 并收到来自 documents.upload 和 workflows.routeDocument 函数的组合响应,表明完全成功(上传和路由有效),部分成功(上传但不是路由),或完全失败(上传失败)
Lambda 函数(按顺序执行):
- documents.upload
- 从 API 网关端点调用
- 将文档上传到 DMS(文档管理系统)
- 为工作流微服务创建 SNS 消息以路由文档
- workflows.routeDocument
- 从订阅的 SNS 主题调用
- SNS 消息中的路由 document/documents
- Returns一个success/failure到原来的api请求
注意为什么 documents.upload 不在内部调用 worksflows.routeDocument
- 微服务不再松耦合
- 如果强制同步,则两个 lambda 函数的计算时间加倍(是否可能)
这种模式可能吗?
谢谢!
这是它崩溃的地方:
-workflows.routeDocument
- Returns a success/failure to the original api request
那是不可能的。通过使用 SNS,您已将服务解耦到这样的程度,即负责生成对 API 网关请求 (documents.upload
) 的响应的 Lambda 函数不知道其他 Lambda 函数中发生了什么。 workflows.routeDocument
Lambda 函数无法访问 API 网关 event
和 context
对象,因此无法更新 API 响应。
唯一可行的方法是 API 网关调用的 Lambda 函数进行某种轮询以等待其他函数调用完成,然后以某种方式访问 return 状态(存储在数据库或其他东西中?)并 return 在响应中编辑它。我认为这会在您的请求处理中引入大量延迟。
在这种情况下,我认为 documents.upload
直接调用 workflows.routeDocument
Lambda 函数更有意义。
简而言之,我对构建通过 SNS(大部分)连接的松耦合微服务感兴趣,以便实时处理 API 请求。
前提
- 需要所有这些都发生在单个 POST 请求响应正文中
- 无法请求客户端拉取成功上传and/or路由成功
AWS API 网关端点
- POST /api/documents/uploadAndRouteDownWorkflow,执行 documents.upload 并收到来自 documents.upload 和 workflows.routeDocument 函数的组合响应,表明完全成功(上传和路由有效),部分成功(上传但不是路由),或完全失败(上传失败)
Lambda 函数(按顺序执行):
- documents.upload
- 从 API 网关端点调用
- 将文档上传到 DMS(文档管理系统)
- 为工作流微服务创建 SNS 消息以路由文档
- workflows.routeDocument
- 从订阅的 SNS 主题调用
- SNS 消息中的路由 document/documents
- Returns一个success/failure到原来的api请求
注意为什么 documents.upload 不在内部调用 worksflows.routeDocument
- 微服务不再松耦合
- 如果强制同步,则两个 lambda 函数的计算时间加倍(是否可能)
这种模式可能吗?
谢谢!
这是它崩溃的地方:
-workflows.routeDocument
- Returns a success/failure to the original api request
那是不可能的。通过使用 SNS,您已将服务解耦到这样的程度,即负责生成对 API 网关请求 (documents.upload
) 的响应的 Lambda 函数不知道其他 Lambda 函数中发生了什么。 workflows.routeDocument
Lambda 函数无法访问 API 网关 event
和 context
对象,因此无法更新 API 响应。
唯一可行的方法是 API 网关调用的 Lambda 函数进行某种轮询以等待其他函数调用完成,然后以某种方式访问 return 状态(存储在数据库或其他东西中?)并 return 在响应中编辑它。我认为这会在您的请求处理中引入大量延迟。
在这种情况下,我认为 documents.upload
直接调用 workflows.routeDocument
Lambda 函数更有意义。