用于 AWS AppSync 中的异步计算的 Graphql 订阅

Posted

技术标签:

【中文标题】用于 AWS AppSync 中的异步计算的 Graphql 订阅【英文标题】:Graphql subscription for asynchronous computation in AWS AppSync 【发布时间】:2020-01-18 22:16:31 【问题描述】:

我希望我的 React Web 应用程序使用 AWS AppSync 订阅接收消息,这些消息是基于对不同于客户端最初提交的变异请求的类型的变异而异步计算的。例如,如果用户投了“票”,我希望服务器立即响应,但服务器还应该向客户端发送整个数据库的聚合,这可能需要额外的时间来计算或者可以以较慢的速度计算。


我假设 AppSync 会通知客户,如果他们订阅了 Graphql,比如说“聚合”类型。

第一季度。如果我编写一个服务器端客户端,即使在客户端收到原始投票请求的响应后,将聚合突变写入 AppSync API,Web 客户端也会收到聚合订阅的消息吗?


我假设我需要创建一个服务器端 Graphql 客户端来编写聚合突变。我想这就像一个http客户端一样简单。

第二季度。当至少一个用户提交突变(投票)时,如何触发计算聚合的代码?我最好的猜测是我需要使用 Lambda 函数来处理原始突变(投票),但在响应 Web 客户端之前,它会启动另一个进程(可能是不同的 Lambda Fn),最终会改变聚合。


我还没有集成 Apollo 客户端,所以我想暂时保持 Web 客户端代码简单。

【问题讨论】:

【参考方案1】:

如果我理解您的问题,您想要启动聚合过程,然后在有新聚合时收到订阅消息。要启动聚合,您可以根据存储数据的位置使用任意数量的东西。例如,如果您使用的是 DynamoDB,则可以在需要投票的更改时使用 DynamoDB 流启动聚合。或者,就像你说的,你可以启动一个 lambda 或其他进程来响应订阅消息进行投票。这些解决方案中的任何一个都需要进行突变以写入聚合,这将导致订阅消息给订阅聚合的客户端。

【讨论】:

以上是关于用于 AWS AppSync 中的异步计算的 Graphql 订阅的主要内容,如果未能解决你的问题,请参考以下文章

AWS AppSync API graphlQL - 需要同步调用 [重复]

用于 ElasticSearch 服务的简单 AWS AppSync 架构和解析器

用于更新相关表的 AWS Appsync 解析器

如何处理 aws-appsync 中的关系?

AWS Appsync Javascript 查询示例和输入语法

AppSync 和被锁定在 AWS 中的想法