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 服务器端订阅试用的更多相关文章

  1. net remoting 服务器端订阅客户端(附源代码)

    remoting 在分布式应用中逐渐在企业级应用发展开来,最初提出分布式应用,主要目的是为了降低服务器的压力,将耗性能的处理放在另外一个程序中,然后将计算结果发送到另外一个应用中.而remoting就 ...

  2. sql2000无法打开1433端口及解决方法

    1.如果你是win2003,那么一定要安装sql的补丁sp3a以上版本SP 检查你的SQL有没有打补丁,没有的话要打上补丁,检查的方法是在查询分析器中运行:select @@version如果出来的版 ...

  3. CoAP 协议解析说明(转)

    CoAP 协议全面分析 HTTP与COAP 请求与响应示例 HTTP请求(文本格式) POST https://getman.cn/echo HTTP/1.1 User-Agent: Fiddler ...

  4. Atitit 图像处理之编程之类库调用的接口api cli gui ws rest  attilax大总结.docx

    Atitit 图像处理之编程之类库调用的接口api cli gui ws rest  attilax大总结.docx 1. 为什么需要接口调用??1 1.1. 为了方便集成复用模块类库1 1.2. 嫁 ...

  5. Apache Ignite简介以及Ignite和Coherence、Gemfire、Redis等的比较

    一.Ignite简介 Apache Ignite 内存数组组织框架是一个高性能.集成和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和不 ...

  6. 【 Zabbix 】nginx监控及故障重启服务

    zabbix agentd 端配置: nginx.conf 配置: location /ngx_status { stub_status on; access_log off; allow 10.0. ...

  7. 初探Remoting双向通信(二)

    原 初探Remoting双向通信(二) 2013年06月25日 11:46:24 喜欢特别冷的冬天下着雪 阅读数 2977 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  8. MQTT 1——物联网集成项目技术选型与说明

    最近做的JAVA项目与物联网设备有集成,记录一下从技术选型到实现,整合: 1.通信协议技术选型,MQTT技术介绍2.MQTT服务端安装,客户端测试3.MQTT客户端与Spring MVC整合 1.项目 ...

  9. prisma mongodb 试用

    prisma 已经支持mongodb了,我们需要做的就是安装新版本的prisma cli,后然初始化项目使用 环境准备 安装cli 注意使用新版本(prisma/1.32.2) 低版本有坑 npm i ...

随机推荐

  1. 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下

    『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 # Author : Hellcat # Time : 2018/2/11 import torch as t import t ...

  2. nyoj-833-博弈

    833-取石子(七) 内存限制:64MB 时间限制:1000ms 特判: No通过数:16 提交数:30 难度:1 题目描述: Yougth和Hrdv玩一个游戏,拿出n个石子摆成一圈,Yougth和H ...

  3. hdu1584

    蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. store procedure

    store procedure: _________________________________________________ set ANSI_NULLS ON set QUOTED_IDEN ...

  5. Java容器涉及的类(代码)

    Customer: public class Customer implements Comparable{ private Integer customerId; private String cu ...

  6. (剑指Offer)面试题59:对称的二叉树

    题目: 请实现一个函数,用来判断一颗二叉树是不是对称的. 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 思路: 对于一棵二叉树,从根结点开始遍历, 如果左右子结点有一个为NULL,那 ...

  7. [转]MVC Html.AntiForgeryToken() 防止CSRF攻击

    [转]MVC Html.AntiForgeryToken() 防止CSRF攻击 本文转自:http://blog.csdn.net/luck901229/article/details/8261640 ...

  8. bzoj1002

    题解: f[i]=(f[i-1]*3+f[i-2]); 高精度计算 代码: #include<bits/stdc++.h> using namespace std; struct big ...

  9. Oracle 12c新特性(For DBA)

    一: Multitenant Architecture (12.1.0.1)      多租户架构是Oracle 12c(12.1)的新增重磅特性,内建的多分租(Multi-tenancy),一个容器 ...

  10. pywin32 的安装

    这个东西不是在包管理器安装一下就可以的. https://github.com/mhammond/pywin32/releases 请到git下载exe安装文件.