消息通知系统设计文档

一、功能概述
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

表结构如下:
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

表结构如下:
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-删除

表结构如下:
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_modifier 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、新建一个基础微服务:base_notify,微服务里面实现手机短信发送,邮件发送,对以上消息通知表的操作,提供发送短信和邮件的RPC接口
    2、提供一个基础组件,实现以上三类应用场景的实现,具体实现思路待考虑。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值