使用 Apollo Gateway 时,Gateway 会将突变直接转发到相关的实现服务。此类请求是同步的。
有没有一种方法可以让 Apollo Gateway 将所有突变发布到像 rabbitmq 这样的消息代理,以便我们可以在网关和实现服务之间实现异步通信?
使用 Apollo Gateway 时,Gateway 会将突变直接转发到相关的实现服务。此类请求是同步的。
有没有一种方法可以让 Apollo Gateway 将所有突变发布到像 rabbitmq 这样的消息代理,以便我们可以在网关和实现服务之间实现异步通信?
作为对您的问题的澄清:请求不是同步的,而是串行的。
与 GraphQL 规范对“允许并行化”开放的查询不同,突变必须以一系列方式运行。
6.2.1 查询
...
- 令 data 为正常运行 ExecuteSelectionSet(selectionSet, queryType, initialValue, variableValues) 的结果(允许并行化)。
6.2.2 突变
...
- 令 data 为连续运行 ExecuteSelectionSet(selectionSet, mutationType, initialValue, variableValues) 的结果。
广泛采用的模式是您的突变应该“在完成后返回,并等到它拥有该数据”。然而,理论上,你可以让你的突变开始一些事件,然后回应说它已经发生了。然后,您可以使用订阅来确定响应何时准备就绪。同样,这并不是真正的“通常使用 GraphQL 的方式”,但从理论上讲,你可以。