当前位置: 首页 > 知识库问答 >
问题:

如何使用 Graphql SPQR 实现订阅?

萧煜
2023-03-14

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

共有1个答案

麻阳
2023-03-14

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

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

但实际上,这对你没有多大帮助,除非你已经知道如何获得发布者

从Java9开始,您可以使用FlowAPI,并使用org.reactivestreams.Flow适配器#toPublisher,您可以将Flow. Publisher转换为org.reactivestreams.Publisher。尽管如此,JDK只有一个内置发布者,SubmissionPublisher,它可能不是您需要的。

相反,使用兼容的库是最容易的,比如RxJava或Spring Reactor。他们使用的类型要么是< code > org . react vestreams . publisher 的直接实例,要么非常容易转换。

对于使用RxJava的示例,您可以从图ql-java看到这个演示项目。或者SPQR的这个测试。但是,这两个都太简单了,无法实际使用。

有关更真实的示例,请参阅SPQR Spring Boot Starter项目的演示。它使用Spring Reactor,无论您是否使用Spring,都可以使用它。该示例在每次相关变异运行时发布更新。

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

版本0.0.3的SPQR Spring Boot启动程序实现了该协议,因此它可以开箱即用地与Apollo客户端一起使用。当然也可以使用其他兼容的客户端,例如GraphQL Playground。

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

 类似资料:
  • 问题内容: 我很快将使用Java的log4j类来创建项目。但是我不认为我对此有任何了解。希望有人能启发我这个小问题。 问题答案: Log4j基本上接受您要输出的任何语句,让您为其分配“严重性”级别(警告,错误,严重等),并以多种方式将其注销。(对于文件,字节流等,有很多附加选项可用。) 这是对log4j的简短介绍。 http://www.developer.com/open/article.php

  • 作为促销方式的一种,满减优惠让利小,效果好,既能让商家赚更多钱,又能让消费者更满意。而且,相较于打折,不会让品牌产生廉价感。现在,你可以用金数据全新推出的「订单满减」应用设置满减优惠,可灵活设置「阶梯满减规则」,刺激买家「主动凑单」,拍下商品「自动改价」,有效提高客单价。 如何配置订单满减 你需要先准备好相关表单,并且配置好微信支付。接下来,从应用中心进入「订单满减」,你就可以为这个表单设置满减活

  • 问题内容: 当前,我正在使用node.js和redis来构建应用程序,使用redis的原因是由于发布/订阅功能。该应用程序只是在用户进入用户或不在房间时通知管理员。 由于我想听join和disjoin事件,我的问题是我是否应该使用两个redisclient来听这两个事件,例如 或者只是使用一个redisclient来监听和分离回调中的逻辑 我知道这两种方式都是可行的,但是我不知道人们在哪种情况下会

  • 我想尝试使用SIMD指令编写一个atoi实现,以包含在RapidJSON(一个C JSON阅读器/写入器库)中。它目前在其他地方进行了一些SSE2和SSE4.2优化。 如果是速度增益,可以并行完成多个结果。这些字符串最初来自JSON数据的缓冲区,因此多原子函数必须执行任何所需的滑动。 我提出的算法如下: 我可以用以下方式初始化长度为N的向量:[10^N..10^1] 我将缓冲区中的每个字符转换为一

  • 我正在使用AudioTrack制作Android MP3播放器应用程序。我不能在任何情况下使用MediaPlayer,我使用16位单声道和44100Hz。我听说方法可以使用类实现,但我不太清楚这一点。请帮帮我。

  • 由于它的TSO内存模型,x86保证了所有存储的总订单。我的问题是是否有人知道这是如何实际实现的。 我对这四道围墙的实施情况印象很好,因此我可以解释当地秩序是如何得以维持的。但这四道栅栏只会给程序下达命令;它不会给你TSO(我知道TSO允许旧的商店跳转到新的货物前面,所以隐式地只需要4个Geofence中的3个)。 单个地址上所有内存操作的总顺序是一致性的责任。但我想知道Intel(特别是Skyla