prisma 服务器端订阅试用
graphql 协议是支持数据的实时订阅功能的(一般基于websocket 进行实现)
prisma 支持客户端订阅以及服务器端订阅(类似webhook),可以方便将
数据推送后端服务
目的
prisma 实现这个功能是方便集成当前的serverless 基础设施,当前支持的是通过webhook
的模式进行时间传递
参考配置
endpoint: ${env:PRISMA_ENDPOINT}
secret: ${env:PRISMA_SECRET}
datamodel: database/datamodel.graphql
subscriptions:
userChangedEmail:
webhook:
url: http://example.org/sendSlackMessage
headers:
Content-Type: application/json
Authorization: Bearer cha2eiheiphesash3shoofo7eceexaequeebuyaequ1reishiujuu6weisao7ohc
query: |
subscription {
user(where: {
mutation_in: [UPDATED]
}) {
node {
name
email
}
}
}
触发条件
mutation {
createUser(data:{
name:"appdemo",
age:444,
version:"v1"
}){
id
name
age
version
}
}
参考项目
项目使用wiremock 进行webhook 模拟
- 项目初始化
使用prisma cli
prisma init
- 项目结构
├── datamodel.graphql
├── docker-compose.yml
├── prisma.yml
├── stubs
│ └── web.json
└── subscription.graphql
- 代码说明
datamodel.graphql: graphql schema 定义
type User {
id: ID! @unique
name: String!
age: Int
version: String!
}
docker-compose.yml docker-compose 服务配置
version: '3'
services:
prisma:
image: prismagraphql/prisma:1.14
ports:
- "4466:4466"
environment:
PRISMA_CONFIG: |
port: 4466
# uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security
# managementApiSecret: my-secret
databases:
default:
connector: mysql
host: mysql
port: 3306
user: root
password: prisma
migrations: true
mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: prisma
volumes:
- ./data/mysql:/var/lib/mysql
mock:
image: rodolpheche/wiremock
ports:
- "9089:8080"
command: "--local-response-templating --verbose"
volumes:
- ./stubs:/home/wiremock/mappings
prisma.yml
endpoint: http://localhost:4466
datamodel: datamodel.graphql
subscriptions:
welcomeNewUser:
webhook: http://mock:8080/webhook
query: subscription.graphql
stubs/web.json (webhook mock service)
{
"request": {
"method": "POST",
"url": "/webhook"
},
"response": {
"status": 200,
"body":"{{{request.body}}}",
"headers": {
"TOKEN": "{{request.headers.TOKEN}}",
"URL":"{{request.url}}",
"content-type":"application/json"
},
"transformers": ["response-template"]
}
}
subscription.graphql 服务端订阅配置
subscription {
user(where:
{
mutation_in:CREATED
}){
node {
id
name
age
}
}
}
启动
因为当前的prisma cli 有一个处理上的bug,直接运行提示的错误如下:
Subscription
✖ The provided query doesn't include any known model name. Please check for the latest subscriptions API.
当前的解决办法是先注释 sss ,先prisma deploy 然后取消注释,prsima deploy --force
- 启动docker-compose
docker-compose up -d
- 部署graphql 服务
prisma deploy && prisma deploy --force 如果有错,参考上边的说明
- 效果

测试功能
- 创建用户请求
mutation {
createUser(data:{
name:"rong",
age:444,
version:"v1"
}){
id
name
age
version
}
}
- mock webhook service 日志
mock_1 | Content-Length: [85]
mock_1 | Content-Type: [application/json]
mock_1 | {"data":{"user":{"node":{"id":"cjld7u53j000n0a50ph4mezug","name":"rong","age":444}}}}
mock_1 |
mock_1 |
mock_1 | Matched response definition:
mock_1 | {
mock_1 | "status" : 200,
mock_1 | "body" : "{\"data\":{\"user\":{\"node\":{\"id\":\"cjld7u53j000n0a50ph4mezug\",\"name\":\"rong\",\"age\":444}}}}",
mock_1 | "headers" : {
mock_1 | "TOKEN" : "",
mock_1 | "URL" : "/webhook",
mock_1 | "content-type" : "application/json"
mock_1 | },
mock_1 | "transformers" : [ "response-template" ]
mock_1 | }
参考资料
https://github.com/rongfengliang/prisma-sss-demo
https://www.prisma.io/docs/reference/server_side-subscriptions/overview-to1ahf0ob6
https://github.com/prisma/prisma/issues/2967
prisma 服务器端订阅试用的更多相关文章
- net remoting 服务器端订阅客户端(附源代码)
remoting 在分布式应用中逐渐在企业级应用发展开来,最初提出分布式应用,主要目的是为了降低服务器的压力,将耗性能的处理放在另外一个程序中,然后将计算结果发送到另外一个应用中.而remoting就 ...
- sql2000无法打开1433端口及解决方法
1.如果你是win2003,那么一定要安装sql的补丁sp3a以上版本SP 检查你的SQL有没有打补丁,没有的话要打上补丁,检查的方法是在查询分析器中运行:select @@version如果出来的版 ...
- CoAP 协议解析说明(转)
CoAP 协议全面分析 HTTP与COAP 请求与响应示例 HTTP请求(文本格式) POST https://getman.cn/echo HTTP/1.1 User-Agent: Fiddler ...
- Atitit 图像处理之编程之类库调用的接口api cli gui ws rest attilax大总结.docx
Atitit 图像处理之编程之类库调用的接口api cli gui ws rest attilax大总结.docx 1. 为什么需要接口调用??1 1.1. 为了方便集成复用模块类库1 1.2. 嫁 ...
- Apache Ignite简介以及Ignite和Coherence、Gemfire、Redis等的比较
一.Ignite简介 Apache Ignite 内存数组组织框架是一个高性能.集成和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和不 ...
- 【 Zabbix 】nginx监控及故障重启服务
zabbix agentd 端配置: nginx.conf 配置: location /ngx_status { stub_status on; access_log off; allow 10.0. ...
- 初探Remoting双向通信(二)
原 初探Remoting双向通信(二) 2013年06月25日 11:46:24 喜欢特别冷的冬天下着雪 阅读数 2977 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- MQTT 1——物联网集成项目技术选型与说明
最近做的JAVA项目与物联网设备有集成,记录一下从技术选型到实现,整合: 1.通信协议技术选型,MQTT技术介绍2.MQTT服务端安装,客户端测试3.MQTT客户端与Spring MVC整合 1.项目 ...
- prisma mongodb 试用
prisma 已经支持mongodb了,我们需要做的就是安装新版本的prisma cli,后然初始化项目使用 环境准备 安装cli 注意使用新版本(prisma/1.32.2) 低版本有坑 npm i ...
随机推荐
- 关于pthread_cond_wait()使用的理解
pthread_cond_wait()是linux多线程同步实现的一种方法,表示等待某一个线程共享变量满足了某种情况时 线程才能继续执行 pthread_cond_wait()之后的代码,如下面的示例 ...
- Service Account和其secrets 作用和场景,看了不亏。。
Service Account概念的引入是基于这样的使用场景: 运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Account它并 ...
- gleez开发环境搭建
一.虚拟主机目录配置 1.配置apache服务器 Apache是常用的web服务器,即常见的用来处理http协议,处理网页的. Apache的配置文件都存放在/etc/apache2/目录,这里有很多 ...
- zuul网关源码解析
zuul网关源码解析 zuul请求的生命周期 ZuulServlet ZuulServlet定义了对zuul整个过程的处理,如下: public void service(javax.servlet. ...
- [LeetCode] 41. First Missing Positive ☆☆☆☆☆(第一个丢失的正数)
Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...
- 小程序数组型图片自适应效果的实现(交流QQ群:604788754)
//本例代码如有问题,请加群,下载今日日期文件,测试.(如对本例有疑问,也可加群咨询群主) WXML: <view class="imgbox"> <block ...
- httpclient cookie相关介绍
http状态管理 cookie是HTTP代理和目标服务器可以交流保持回话的状态信息的令牌或短包. httpclient使用Cookie接口来代表抽象的cookie令牌,在它的简单形式中http的coo ...
- OPENSHIFT MYSQL使用Navicat远程连接
1.安装OpenShift的一个叫RHC的远程管理客户端:https://developers.openshift.com/en/getting-started-windows.html 注意ruby ...
- systemctl centos fedora 用法
LinuxSystemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syste ...
- L1-034 点赞
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持.每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性.本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特 ...