-
Notifications
You must be signed in to change notification settings - Fork 3
marstone edited this page Oct 14, 2024
·
12 revisions
- 本文旨在解释数据网关的消息队列服务的设计与使用方式
- 使用 CloudEvent 标准
- 举例:
{
"specversion" : "1.0",
"type" : "user.created", // 和Topic一致,一般是 命名空间.数据类型.事件 的命名规范
"source" : "XsFvzALh6KiMJ8tLa7G3", // URI Reference格式,目前默认使用应用的client-id
"subject" : "202103704", // 对应与type中类型的id,如学工号
"id" : "A234-1234-1234", // 消息id,source+id 需唯一
"time" : "2018-04-05T17:31:00Z", // 时间戳 ISO 8601 格式
"datacontenttype" : "application/json", // 数据内容类型,目前只支持json
"data" : "{\"name\":\"Alice\", \"age\":\"20\"}", // 额外数据,因消息类型而异
"tenant": "example.com", // 消息发布者的租户(来自access_token)
"clientid": "n7dkDbprk4JZxDCD9UyU", // 消息发布者的应用(来自access_token)
"openid": "n7dkDbprk4JZxDCD9UyU", // 消息发布者的用户(来自access_token)
"services": [ "sso" ], // 消息发布者的服务(来自 clientid 对应的服务列表,或由消息发布者指定)
}- 注:平台内置Topic,命名空间被省略
| Topic/Type | subject | Explained |
|---|---|---|
| tenant.created | {tenant}[1]
|
租户创建 |
| tenant.updated | {tenant} | 租户更新 |
| tenant.deleted | {tenant} | 租户删除 |
| tenant.ready | {tenant} | 租户创建完成,进入可用状态 |
| tenant.preference.changed | {tenant} | 租户配置变更 |
| app.created | {client-id} | 应用创建 |
app.activated[2]
|
{client-id} | 应用激活(租户内安装) |
app.deactivated[2]
|
{client-id} | 应用取消激活(租户内删除) |
| app.preference.changed | {client-id} | 应用配置变更 |
| service.invoked | {服务代码} | 网关接口被调用 |
user.created/updated/deleted[3]
|
{openid} | 用户创建/更新/删除 |
user.position.created/updated/deleted[3]
|
{openid} | 用户身份(三元组)创建/更新/删除 |
| user.logout | {id-token} | 用户登出,用于OIDC后端统一登出 |
| user.preference.changed | {openid} | 用户偏好变化 |
| user.task.changed | {openid} | 用户待办变化 |
| user.password.changed | {openid} | 用户密码变化 |
| user.notification.changed | {openid} | 用户提醒变化,含新提醒、已读 |
| user.issue.changed | {openid} | 用户工单变化,含新提醒、已读 |
| users.changed | "*" |
批量用户变化 |
dept.created/updated/deleted[3]
|
{部门代码} | 部门创建/更新/删除 |
post.created/updated/deleted[3]
|
{岗位代码} | 岗位创建/更新/删除 |
| datasource.cdc | {数据源ID} | 数据源数据发生变化(binlog) |
| usersource.cdc | "*" |
身份权威源数据发生变化 |
| infoplus.user.task_changed | {用户账号@域名} | 用户待办发生变化 |
| infoplus.user.cc_changed | {用户账号@域名} | 用户抄送发生变化 |
| factory.part.changed | {部件ID} | 应用工厂中部件定义发生变化 |
- [1] tenant参数参考Multitenancy
- [2] 应用激活/取消激活的一些解释
- 对于 maker 应用,
subject为 oauth 的client_id,其他开发工具使用的subject可能不同,由各自应用解释 -
data.tenant为当前应用激活的租户编码 -
data.temlateId和 WorkspaceAPI 中的 [TQ2] 查询的id参数一致
- 对于 maker 应用,
- 不同的Topic对应的消息中
data字段的数据结构不同
[{
"kind": [insert|update|delete|alter|create|drop], // DB执行的操作
"service": {string}, // GraphQL服务名
"type": {string}, // GraphQL类型名
"table": {string}, // 数据库表名
"key": {string}, // 主键值,对应GraphQL类型中的ID字段(可选)
}]{
"password": {string}, // 密码明文
}{
"patches": [ {Patch} ], // 补丁信息
"traces": [ {Trace} ] // 用户行为信息
}- 属于数据网关的内置功能,通过GraphQL协议进行
Mutation(pub)和Subscription(sub) - pub接口
type Mutation {
pub(message: MessageInput!): Message
}
# 参考第一节消息定义
type Message {
id: ID
type: String
specversion: String
source: String
time: Long
subject: String
datacontenttype: String
data: String
tenant: String
clientid: String
openid: String
services: [String]
}
# 参考第一节消息定义
input MessageInput {
id: ID
type: String
specversion: String
source: String
time: Long
subject: String
datacontenttype: String
data: String
tenant: String
clientid: String
openid: String
services: [String]
}
- sub接口
type Subscription {
sub(
topics: String
filter: Filter
since: Long
): Message
}