gpt4 book ai didi

graphql - 如何使用 Graphql SPQR 实现订阅?

转载 作者:行者123 更新时间:2023-12-04 12:17:39 25 4
gpt4 key购买 nike

如何使用 Graphql SPQR 库实现 GraphQL 的订阅功能?

最佳答案

一般来说,你只需要用 @GraphQLSubscription 注释一个方法。并确保该方法返回 org.reactivestreams.Publisher .
例如。

@GraphQLSubscription
public Publisher<Issue> issueStatusChanged(String code) {
return ...;
}

但实际上,这对您没有多大帮助,除非您已经知道如何获得 Publisher .

从 Java 9 开始,您拥有 Flow API 供您使用,并使用 org.reactivestreams.FlowAdapters#toPublisher ,您可以转换 Flow.Publisherorg.reactivestreams.Publisher .尽管如此,JDK 只有一个内置发布者, SubmissionPublisher 这可能不是你需要的。

相反,它是迄今为止最容易使用兼容库的方法,例如 RxJava 或 Spring Reactor。它们使用的类型是 org.reactivestreams.Publisher 的直接实例。或者很容易转换。

有关使用 RxJava 的示例,您可以查看 this demo project来自graphql-java。或 this test来自 SPQR。但是,这两者都过于简单,无法实际使用。

有关更现实的示例,请参阅 this demo来自 SPQR Spring Boot Starter 项目。它使用的是 Spring Reactor,无论您是否使用 Spring,都可以使用它。每次相关突变运行时,该示例都会发布更新。

现在,制作 Publisher只是问题的一半。您需要有一种方法将更新发送到客户端。此外,客户端和服务器需要就他们用来交换消息(新结果、任何遇到的错误以及控制消息)的协议(protocol)达成一致。目前,只有一种广泛使用的协议(protocol)存在 - Apollo graphql-ws protocol .它基于 WebSockets。

SPQR Spring Boot Starter从 0.0.3 版本开始,实现了这个协议(protocol),因此它可以开箱即用地与 Apollo 客户端一起使用。其他合规客户,例如 GraphQL Playground自然也可以使用。

即使您根本不想使用 SPQR Spring Boot Starter 或 Spring,您仍然可以从那里的示例中学习如何实现服务器。至于客户端,任何 Apollo 教程都可以助您一臂之力。您可以在测试和开发期间使用 GraphQL Playground(GraphiQL 目前不支持订阅)。

关于graphql - 如何使用 Graphql SPQR 实现订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51113678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com