File upload 使用Lambda函数支持的API网关,该函数使用SNS在微服务之间进行通信

File upload 使用Lambda函数支持的API网关,该函数使用SNS在微服务之间进行通信,file-upload,aws-lambda,aws-api-gateway,amazon-sns,File Upload,Aws Lambda,Aws Api Gateway,Amazon Sns,简言之,我感兴趣的是构建通过SNS连接的松散耦合的微服务(大多数情况下),以便实时处理API请求 前提 所有这些都需要在单个POST请求-响应主体中发生吗 无法要求客户端拉取以成功上载和/或成功路由 AWS API网关端点 POST/api/documents/uploadAndRouteDownWorkflow,执行documents.upload并从documents.upload和workflows.routedDocument函数接收组合响应,指示完全成功(上载和路由已工作)、部分

简言之,我感兴趣的是构建通过SNS连接的松散耦合的微服务(大多数情况下),以便实时处理API请求

前提

  • 所有这些都需要在单个POST请求-响应主体中发生吗
  • 无法要求客户端拉取以成功上载和/或成功路由
AWS API网关端点

  • POST/api/documents/uploadAndRouteDownWorkflow,执行documents.upload并从documents.upload和workflows.routedDocument函数接收组合响应,指示完全成功(上载和路由已工作)、部分成功(上载但未路由)或完全失败(上载失败)
Lambda函数(按顺序执行):

-文档。上传

  • 从API网关端点调用
  • 将文档上载到DMS(文档管理系统)
  • 创建一条SNS消息到工作流微服务,以便传送文档
-工作流.路由文件

  • 从订阅的SNS主题调用
  • 发送SNS消息中的文档
  • 返回原始api请求的成功/失败
说明documents.upload为什么不在内部调用worksflows.routedDocument

  • 不再松散耦合的微服务
  • 如果强制同步,两个lambda函数的计算时间加倍(是否可能)
  • 这种模式可能吗


    谢谢

    下面是它的故障:

    -工作流.路由文件

    • 返回原始api请求的成功/失败
    这是不可能的。通过使用SNS,您已经将服务解耦到一个点,即负责生成API网关请求响应的Lambda函数(
    documents.upload
    )不知道另一个Lambda函数中发生了什么。
    workflows.routedDocument
    Lambda函数无法访问API网关
    事件
    上下文
    对象,因此无法更新API响应

    唯一可行的方法是,API网关调用的Lambda函数进行某种轮询,等待另一个函数调用完成,然后以某种方式访问返回状态(存储在数据库或其他什么东西中),并在响应中返回该状态。我认为这将在您的请求处理中引入大量延迟


    在这种情况下,我认为
    文档。上传
    直接调用
    工作流。RoutedDocument

    Lambda函数更有意义。

    因此,如果我理解正确,我需要维护某种类型的同步流,以便返回指示原始POST请求成功失败的结果?在这方面,如果我想保持这些部分松散耦合,我需要寻找AWS之外的另一种解决方案。通过直接回复()阅读RabbitMQ中的RPC模式似乎符合我的兴趣)。AWS中是否有其他方法可以在保持同步行为的同时保持松散耦合?RabbitMQ RPC模式也可以通过Amazon的SQS实现。但是,您需要意识到RabbitMQ仍然在使用队列和轮询来传递响应。在任何完全解耦的解决方案中,您都将拥有一个长期运行的
    文档。上载
    函数轮询数据库或队列或等待
    工作流生成响应的东西。路由文档
    函数。@DavidGarza您可能对今天的AWS公告感兴趣:很棒的提示!它看起来和我想做的一样。