前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >消息通知系统设计文档

消息通知系统设计文档

原创
作者头像
黄小怪
修改2020-03-02 07:12:13
7.3K1
修改2020-03-02 07:12:13
举报
文章被收录于专栏:小怪聊职场

一、功能概述

1.不同的系统的消息,管理后台、小程序(B/C)、微信公众号、短信、邮件等

2.不同业务的消息,充值、提现到账、系统更新、公告等

3.消息明细,标题、简述、详情、已读未读状态

4.有效时间,失效时间

5.支持界面的接下来操作,跳转按钮

6.语音消息?图片消息?富文本消息?

二、设计方案

  • 需要考虑三类应用场景

1.私有信息,需要告知多个服务平台,需要用到MQ进行解藕 2.私有信息,不需要告知多个服务平台,直接调用 3.公开信息,一份信息广播给大部分/所有用户时,比如网站公告、banner、活动、系统更新等信息,需要用到MQ及时更新缓存

  • 特殊说明

需要考虑做成一个组件,各个应用需要使用是调用即可

2.1 用户提现业务时序图——私有信息,需要用到MQ解藕类
  • 主要思想

利用MQ进行业务解偶。

  • 注意事项

因为涉及到资金相关,生产者需要保证消息至少一次成功,所以要有重试逻辑;消费者需要考虑因为重试导致的多次消费问题,所以需要加幂等处理,幂等可以使用Redis去做

用户提现业务时序图
用户提现业务时序图
2.2 员工申请加入企业业务时序图——私有信息直接获取类
员工申请加入企业业务时序图
员工申请加入企业业务时序图
2.3 系统类公告信息业务时序图——公开信息需本地缓存类
  • 主要思想

公共信息的获取主要特性是有大量用户获取的数据是同一份数据,比如网站公告、banner、活动 那么如果每次都从数据库拿,势必会对数据库造成很多流量,再加上这类数据一般修改不频繁,所以放在最外层的服务缓存 当有修改时,MQ通知出去

系统类公告信息业务时序图
系统类公告信息业务时序图

三、数据库设计

3.1 私有消息通知模板表(msg_notify_private_template)

消息通知模板主要是方便在发送通知时可以灵活使用模版,模版主要包括:

【腾讯】您充值的 ${amount} 元已经到账,请及时查看。

【腾讯】您已从${company}公司成功提现${amount}元。

【腾讯】您的KYC认证申请,审核失败,请重新上传身份认证信息。

【腾讯】您的KYC认证申请,已通过审核。

【腾讯】您申请加入${company}公司失败,请登录网站重新申请。

【腾讯】您申请加入${company}公司审核通过。

【腾讯】您的账号【${account}】在【${time}】使用了新的 IP地址【${unusualIp}】登录了腾讯后台管理系统,请确认这是您本人的操作。

【腾讯】尊敬的用户,您已成功注册腾讯。

【腾讯】您的验证码为${code},30分钟内有效,请勿将验证码告诉他人。若非本人操作,请忽略此信息。感谢您的支持与信任。

字段名

类型

允许空

字段说明

示例

id

bigint(20)

no

主键

1

notify_channel

varchar(30)

no

通知渠道:SMS/PAGE_POPUP/NOTIFY_CENTER

SMS

msg_language

varchar(10)

no

消息语言:zh/en

en

msg_type

varchar(30)

no

消息类型:对应枚举NotifyTypeEnum#VERIFICATION_CODE(验证码)、REGISTER_SUCCESS(注册成功) 、充值、算税、发薪、到账、系统更新

VERIFICATION_CODE

title

varchar(300)

no

模板标题

提现成功

content

varchar(1000)

no

模板内容

【腾讯】您已从${company}公司成功提现${amount}元。

out_template_id

varchar(60)

no

外部模板id,对应第三方的短信id

162632

表结构如下:

代码语言:javascript
复制
DROP TABLE IF EXISTS  msg_notify_template;
CREATE TABLE msg_notify_template (
  id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  notify_channel varchar(30) NOT NULL COMMENT '通知渠道:SMS/PAGE_POPUP/NOTIFY_CENTER',
  msg_language varchar(10) NOT NULL COMMENT '消息语言:zh/en',
  msg_type varchar(30) NOT NULL COMMENT '消息类型:对应枚举NotifyTypeEnum#VERIFICATION_CODE(验证码)、REGISTER_SUCCESS(注册成功)',
  title varchar(300) DEFAULT NULL COMMENT '模板标题',
  content varchar(1000) DEFAULT NULL COMMENT '模板内容,带占位符:【腾讯】您已从${company}公司成功提现${amount}元。',
  out_template_id varchar(60) DEFAULT NULL COMMENT '外部模板id,对应第三方的短信id',
  GMT_CREATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CREATER varchar(32) DEFAULT NULL COMMENT '创建人',
  GMT_MODIFIED timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  MODIFIER varchar(32) DEFAULT NULL COMMENT '修改人',
  MEMO varchar(200) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (id),
  UNIQUE KEY uniq_idx_ntype (notify_type,notify_channel,notify_language)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='消息通知模板表';
3.2 私有消息通知信息记录表(msg_notify_private_record)

私有信息通知基本都是文本信息,明确下有没有可能有其他类型的信息???

字段名

类型

允许空

字段说明

示例

id

bigint(20)

no

主键

1

send_sys

varchar

no

发送系统:管家、小程序(B/C),SAAS(PC)、微信公众号、短信、邮件

1

send_id

bigint(20)

no

发送者id,如果为0则表示是系统发送

0

rec_id

bigint(20)

no

接受者id

123

language

语言

语言:zh/en

title

varchar(100)

no

标题

提现成功

content

varchar(500)

no

内容

【腾讯】您已从腾讯公司成功提现100元。

more_content

varchar(1000)

no

更多内容,很多情况下是空

null

status

varchar(10)

no

信息状态:未读、已读

未读

hyperlink

varchar(1000)

yes

跳转链接

url

表结构如下:

代码语言:javascript
复制
DROP TABLE IF EXISTS  msg_notify_private_record;
CREATE TABLE msg_notify_record (
  id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  send_sys varchar(10) NOT NULL DEFAULT '1' COMMENT '发送系统:管家、小程序(B/C),SAAS(PC)、微信公众号',
  send_id bigint(20) NOT NULL DEFAULT 0 COMMENT '发送者id,如果为0则表示是系统发送',
  rec_id bigint(20) NOT NULL DEFAULT 0 COMMENT '接受者id',
  title varchar(100) DEFAULT NULL COMMENT '标题',
  content varchar(500) DEFAULT NULL COMMENT '内容,带占位符:【腾讯】您已从腾讯公司成功提现100元。',
  more_content varchar(1000) DEFAULT NULL COMMENT '更多内容',
  status varchar(10) NOT NULL DEFAULT '未读' COMMENT '信息状态:未读、已读、失效',
  hyperlink varchar(1000) DEFAULT NULL COMMENT '跳转链接',
  GMT_CREATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CREATER varchar(32) DEFAULT NULL COMMENT '创建人',
  GMT_MODIFIED timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  MODIFIER varchar(32) DEFAULT NULL COMMENT '修改人',
  MEMO varchar(200) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (id),
  UNIQUE KEY uniq_idx_ntype (notify_type,notify_channel,notify_language)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='消息通知基础信息记录表';

3.3 公有消息通知信息记录表(msg_notify_public_record)

公有信息包括文本、图片、语音消息,公有信息一般都是由后台管理员发送出去,主要包括网站公告、banner、活动、系统更新等。

字段名

类型

允许空

字段说明

示例

id

bigint(20)

no

主键

1

msg_location

bigint(20)

no

信息的显示位置

0

index

bigint(20)

no

接受者id

123

language

int

语言

send_id

bigint(20)

no

发送者id,管理员id

0

display_platform

int

显示的平台。1- web端, 2-移动端

msg_type

int

no

信息类型:1-文本、2-图片、3-语音

1

text_title

varchar(100)

文本的标题

text_content

varchar(500)

文本的内容,支持富文本

img_desc

varchar(100)

图片描述

img_url

varchar(500)

图片存储地址

hyperlink

varchar(500)

超链接

status

int

1-有效、0-删除

表结构如下:

代码语言:javascript
复制
DROP TABLE IF EXISTS  msg_notify_public_record;
CREATE TABLE msg_notify_public_record (
  id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id 自增',
  msg_location int(11) NOT NULL DEFAULT '0' COMMENT '文本的显示位置',
  index int(11) NOT NULL COMMENT '文本的序号',
  language int(11) NOT NULL COMMENT '语言',
  status varchar(10) NOT NULL DEFAULT '未读' COMMENT '状态:1-有效、0-删除',
  hyperlink varchar(1000) DEFAULT NULL COMMENT '跳转链接',
  GMT_CREATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CREATER varchar(32) DEFAULT NULL COMMENT '创建人',
  GMT_MODIFIED timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  MODIFIER varchar(32) DEFAULT NULL COMMENT '修改人',
  MEMO varchar(200) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (id),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='公有消息通知信息记录表';

四、实现方案

1.新建一个基础微服务:basic-notify,微服务里面实现手机短信发送、邮件发送、对以上消息通知表的操作,提供发送短信和邮件的RPC接口

2.提供一个基础组件,实现以上三类应用场景的实现,具体实现思路待考虑

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、功能概述
  • 二、设计方案
    • 2.1 用户提现业务时序图——私有信息,需要用到MQ解藕类
      • 2.2 员工申请加入企业业务时序图——私有信息直接获取类
        • 2.3 系统类公告信息业务时序图——公开信息需本地缓存类
        • 三、数据库设计
          • 3.1 私有消息通知模板表(msg_notify_private_template)
            • 3.2 私有消息通知信息记录表(msg_notify_private_record)
              • 3.3 公有消息通知信息记录表(msg_notify_public_record)
              • 四、实现方案
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档