数据库
订阅
CREATE TABLE `subscription` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`desc` varchar(256) NOT NULL,
`topic` varchar(64) NOT NULL COMMENT '主题,比如`order`',
`tags` varchar(256) NOT NULL COMMENT '订阅标签',
`subscriber` varchar(64) NOT NULL COMMENT '订阅消息的资源,比如`purchase_task`,相同 key 的消息在一个订阅资源内保续',
`push_url` varchar(256) NOT NULL COMMENT '消息接受 url, 比如`/station/purchase/task/create`',
`check_url` varchar(256) NOT NULL DEFAULT '' COMMENT '检查 url',
`creator_name` varchar(32) NOT NULL DEFAULT '',
`header_filters` json COMMENT '过滤项,从消息的头字段中提取过滤项,符合条件的才会被推送,为空时不过滤,支持正则',
`cookie_filters` json COMMENT '过滤项,从消息的cookies中提取过滤项,符合条件的才会被推送,为空时不过滤,支持正则',
`create_time` datetime NOT NULL,
`modify_time` datetime NOT NULL,
`delete_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='订阅表';
不要支持灰度
消息表
CREATE TABLE `msg` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`topic` varchar(128) NOT NULL COMMENT '数据源',
`tags` varchar(256) NOT NULL COMMENT '消息自带标签',
`body` text NOT NULL COMMENT '完整数据',
`body_hash` varchar(64) NOT NULL COMMENT '数据hash值用于校验',
`key` varchar(128) NOT NULL COMMENT '关键字',
`seq` int(11) NOT NULL COMMENT '序号(用于保证和关键字相关的消息的顺序)',
`serial` varchar(64) NOT NULL DEFAULT '' COMMENT '事务号',
`send_count` int(11) NOT NULL COMMENT '发送次数',
`status` int(11) NOT NULL COMMENT '状态(1未操作2已操作3已发送4已接收)',
`create_time` datetime NOT NULL,
`modify_time` datetime NOT NULL,
`delete_time` datetime NOT NULL,
`cookies` json NOT NULL,
`headers` json NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='消息表';
推送表
CREATE TABLE `push` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`subscription_id` int(11) NOT NULL COMMENT '订阅ID',
`msg_id` bigint(20) NOT NULL COMMENT '消息ID',
`key` varchar(128) NOT NULL COMMENT '关键字',
`subscriber` varchar(64) NOT NULL COMMENT '订阅消息的资源,比如`purchase_task`',
`msg_seq` int(11) NOT NULL COMMENT '消息序号',
`seq` int(11) NOT NULL COMMENT '推送序号',
`push_count` int(11) NOT NULL COMMENT '推送次数',
`status` int(11) NOT NULL COMMENT '状态(1已接收2推送成功3推送失败)',
`create_time` datetime NOT NULL,
`modify_time` datetime NOT NULL,
`delete_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='推送表';