React调用AWS和SQS的通用架构

问题描述 投票:0回答:1

AWS 有点新。我有一个高层次的问题。我正在寻找有关总体架构和工作流程的一些见解,而不需要深入细节。 所以:我需要在客户端上安装一个 React 应用程序,称为 AWS。反过来,在服务器上,某些代码将向某些第三方发送队列消息以执行某些操作。在等待响应时,React 应用程序将显示状态更新,这意味着服务器上发生的操作的不同阶段。一切完成后,它会显示响应。

这就是我构建它的方式:React 调用 API 网关,API 网关又调用 Lamba 函数,然后调用 SQS 并在某个队列上发送消息。但我不确定的是:

  1. Lambda 如何等待响应?它是一个 2 路队列吗? Lambda 是否会一直轮询直到有答案,然后将其返回给客户端,还是会有两个 Lambda?一个发送队列,另一个由响应触发......?如果是第二个 Lambda,React 将如何查询它?发送时是否会有某种 Id,并且第三方在完成该 Id 后返回一条队列消息以便我们可以匹配它们,或者……?什么会触发第二个 Lamba(如果我们正在执行两个 lambda),到达队列的消息将成为触发器,或者它会继续轮询,还是……?
  2. React 客户端如何更新消息?继续轮询某些 API?与发送的 API 不同的 API?我是否需要 websockets 来显示状态更新,或者类似 RXJS 的东西或者……?是通过 HTTP 查询某些 API(使用 Axios 或 Fetch API 或其他方式),还是查询队列的某个 NPM 包,在这种情况下,我什至可能不需要 Lambda 检查返回消息,例如来自 aws 的 Amplify -放大..?

非常感谢任何类型的知识答案。再说一次,只是高层架构低细节。剩下的我自己想办法。

谢谢!

reactjs amazon-web-services amazon-sqs
1个回答
0
投票

您发送请求,您就会收到响应。为了发送响应,您需要保持到达 lambda 的请求“打开”(=lambda 正在运行,即轮询一些结果)。我不能推荐。

  • Lambda 按运行的毫秒数收费。如果等到问题得到解决后才打开,只要它打开,您就需要付费。因此,与其他解决方案相比,它会非常昂贵。

如果您想像这样(=客户端发送请求,它将打开几秒钟,直到您想要的所有内容都得到解决,然后发送响应),请使用 Fargate。 (你必须提供docker镜像,而不仅仅是代码,但它基本上也是无服务器的,你不必关心任何事情)。单个容器通常可以处理数百个并发请求。

使用容器,您还可以使用 Websockets,它本质上可以做您想做的事情(您不必进行长时间轮询/状态轮询,您可以通过 websocket 从后端主动更新客户端)。

使用无服务器的最简单解决方案可能是使用 3 个以上的 lambda:

  1. 启动流程(=将某些内容发送到队列)
  2. (1 个或多个 lambda)处理您需要的任何内容,如果第 3 方向您发送 Webhook 或者您连接到该第 3 方队列并且它们让您知道某些内容已完成,我不知道触发器。或者每 x 秒通过 CRON 触发一些 lambda。
  3. 流的状态(=创建流后React客户端将定期调用)
© www.soinside.com 2019 - 2024. All rights reserved.