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 ...
随机推荐
- vij 1097 贪心
合并果子 描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之 ...
- Servlet 与 CGI 的比较
和CGI程序一样,Servlet可以响应用户的指令(提交一个FORM等等),也可以象CGI程序一样,收集用户表单的信息并给予动态反馈(简单的注册信息录入和检查错误).然而,Servlet的机制并不仅仅 ...
- JS获取昨天/今天/今年第一天的方法
talk is cheap,show me the code! //获取昨天 var day1 = new Date(); day1.setTime(day1.getTime()-24*60*60*1 ...
- Java多线程的同步控制记录
Java多线程的同步控制记录 一.重入锁 重入锁完全可以代替 synchronized 关键字.在JDK 1.5 早期版本,重入锁的性能优于 synchronized.JDK 1.6 开始,对于 sy ...
- shiro中OAuth2 集成
OAuth 角色 资源拥有者(resource owner): 能授权访问受保护资源的一个实体,可以是一个人,那我们称之为最终用户:如新浪微博用户 zhangsan: 资源服务器(resource s ...
- anroid学习目录总结
当前标签: Android开发学习总结 Android开发学习总结(六)—— APK反编译 孤傲苍狼 2015-07-26 12:48 阅读:4245 评论:5 Android开发学习总结 ...
- zoj2112&&bzoj1901
题解: 可修改的主席树 一开始,我就按照最暴力的方法,空间nlognlogn 然后zju上面过不了,bzoj没有权限号 然后,参考了往上的论文,发现可以把初始的主席树先建好 然后,每次只需要维护修改的 ...
- 【转载】maven用处
http://bbs.csdn.net/topics/80014314 当您的项目逐渐变得庞大和复杂时,最好使用一种构建工具来自动构建您的项目.例如,一个典型的java项目,每次构建时都要经历编译ja ...
- Pycharm(三)常用设置
File - Settings (ctrl+alt+s) python模板 Editor - File and Code Templates - Python Script 可以使用部分变量. # ! ...
- 【机器学习PAI实践十二】机器学习算法基于信用卡消费记录做信用评分
背景 如果你是做互联网金融的,那么一定听说过评分卡.评分卡是信用风险评估领域常用的建模方法,评分卡并不简单对应于某一种机器学习算法,而是一种通用的建模框架,将原始数据通过分箱后进行特征工程变换,继而应 ...