前言

消息通知系统(notification-system)作为一个独立的微服务,完整地负责了 App 端内所有消息通知相关的后端功能实现。该系统既需要与文章系统、订单系统、会员系统等相关联,也需要和其它业务系统相关联,是一个偏底层的通用服务系统。

App 端内的消息通知类型常见有这几项:评论通知、点赞通知、收藏通知、订单通知、活动通知、个人中心相关通知等。该系统在可拓展性、高性能、较高可用性、数据一致性等方面有较高要求,最终目的是提升用户粘性、加强 App 与用户的互动、支撑核心业务的发展。

文章的(上)篇将从需求分析、数据模型设计、关键流程设计这 3 部分来说明,(下)篇将从技术选型、后端接口设计、关键逻辑实现这 3 部分来进行说明。


一、需求分析

主要从发送通知、撤回通知、通知消息数、通知消息列表这 4 个子需求来展开。

1.1发送通知

  • 该操作一般由业务系统发出通知,业务系统包括了 App 端和管理后台这两种;

  • App 内的发起的通知一般由 App 用户即会员(member)自己来操作,如:在评论区回复评论,则其父评论的发布者需要收到评论回复通知;

  • 管理后台发出的通知一般是管理员将某种类型(文本or图片等)的消息发送至 App 用户,如:某个活动的运营者在后台给 App 用户发送获奖通知。

1.2撤回通知

  • 这是一个可选操作,一般也是由业务系统来操作,具体会由管理后台来完成,在 App 端一般较少有此类操作;

  • 管理后台可以针对已经发送成功的通知进行单条撤回或者批量撤回,App 用户的通知列表和未读消息数将会随之变化。

1.3通知消息数

  • 在App ”我的“模块,新增消息通知 icon,建议命名为”通知“;

  • 当有新通知时显示 x 条新消息(红色数字),显示数字为该用户所有未读新消息数之和;

  • 有新增一条未读消息时数量+1,撤回一条未读消息数量-1;

  • 未读消息数需要与消息通知列表的未读消息数一致。

1.4通知消息列表

  • 点击 “通知” icon后进入消息通知列表,根据通知类型分为不同的 tab 页;

  • 列表展示该用户收到的所有消息通知,并按通知时间倒序展示;

  • 新消息用红点标识,查看后退出的状态标记为已读,即红点会消失;

  • 点击具体的消息,如果是链接,则支持跳转到对应地址;如果是图文,则支持查看;如果是文章,则支持跳转查看。


二、数据模型设计

该系统的数据模型分为两部分:数据库与缓存。其中对数据库的概念模型(E-R图)和逻辑模型(表设计)进行展开,对缓存的数据结构在关键逻辑实现章节会进一步说明。

2.1概念模型

该系统目前设计为3张表,命名为:notification(通知记录表)、notification_config(通知配置表)、external_sys(外部系统表)。

概念模型使用 E-R 图来表示,其中 notification 与 notification_config 为1对多的关系,且下面为了便于描述,只给出关键字段,其它字段可以作为冗余。

E-R图 1

external_sys 为单独记录外部业务系统的信息,用于业务系统调用通知系统接口时的身份校验:

E-R图 2

2.2逻辑模型

下面只给出关键字段的表设计,其它字段可以作为冗余:

notification 表设计

notification_cofig 表设计

external_sys 表设计


三、关键流程设计

下面是业务简单拆分后的泳道图,基于此图再做关键流程的设计。

业务流程泳道图

下面通过一个简单的时序图(不含撤回)来进行关键流程的拆解:

业务流程时序图

本篇小结

到这里Java 互联网项目中消息通知系统的设计与实现(上)篇就暂告一段落了,剩下的部分包括技术选型、接口设计、关键逻辑设计会在下篇来进行说明。

系统设计的文章都是通过大量的实践与验证,最后才能下笔成文分享给大家的。如果文章有不足和错误,还请大家指正。或者你有其它想说的,也欢迎大家在评论区里交流!

【解决方案】Java 互联网项目中消息通知系统的设计与实现(上)的更多相关文章

  1. Java学习笔记三十:Java小项目之租车系统

    Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...

  2. 【原创】互联网项目中mysql应该选什么事务隔离级别

    摘要 企业千万家,靠谱没几家. 社招选错家,亲人两行泪. 祝大家金三银四跳槽顺利! 引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?& ...

  3. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  4. Java Web项目中连接Access数据库的配置方法

    本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...

  5. java web项目中打开资源文件中文乱码

    1 java web项目中经常使用多模块管理.在某一个模块中添加了一些资源文件.但不是启动项目.有时候需要在程序中读取资源文件内容,打包后放到容器中就不能正常运行了.需要将所有资源文件放到启动项目的 ...

  6. 互联网项目中mysql推荐(读已提交RC)的事务隔离级别

    [原创]互联网项目中mysql应该选什么事务隔离级别 Mysql为什么不和Oracle一样使用RC,而用RR 使用RC的原因 这个是有历史原因的,当然要从我们的主从复制开始讲起了!主从复制,是基于什么 ...

  7. 互联网项目中mysql应该选什么事务隔离级别

    引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:“讲讲mysql有几个事务隔离级别?” 你:“读未提交,读已提交,可重复读,串行化四个!默认是可重复读” 面试官:“为什么mysql ...

  8. 在Java web项目中防止用户注销后使用浏览器中的“后退”按钮返回注销前页面

    一背景 公司安全整改, 要求:系统中对于关键业务操作应确保使用浏览器"后退"功能无法回到上一步操作界面. 提供:凭证提供所有被检查系统关键业务操作后回退视频,视频显示关键业务操作后 ...

  9. 【转】互联网项目中mysql应该选什么事务隔离级别

    作者:孤独烟 转自:https://www.cnblogs.com/rjzheng/p/10510174.html 摘要 企业千万家,靠谱没几家.社招选错家,亲人两行泪. 祝大家金三银四跳槽顺利! 引 ...

  10. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

随机推荐

  1. WPF 使用 ManipulationDemo 工具辅助调试设备触摸失效问题

    本文将和大家介绍我所在的团队开源的 ManipulationDemo 工具.通过 ManipulationDemo 工具可以提升调试设备触摸失效的效率 此工具在 GitHub 上完全开源,请看 htt ...

  2. 二进制安装多master节点的k8s集群(2)

    1.环境准备 k8s集群角色 IP 主机名 安装的组件 控制节点 192.168.1.10 master apiserver.controller-manager.scheduler.etcd.doc ...

  3. Codeforces Round #922 (Div. 2) ABCD

    A. Brick Wall 很直白的贪心,显然就是全放横着的砖最优,每行中最多能放 \(\lfloor \dfrac{m}{2} \rfloor\) 个,答案为 \(n \cdot \lfloor \ ...

  4. FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放

    ​FFmpeg结合SDL可以播放音频文件,也能播放视频文件中的音频流,<FFmpeg开发实战:从零基础到短视频上线>一书第10章的示例程序playaudio.c支持播放mp3和aac两种格 ...

  5. 【股票爬虫教程】我用100行Python代码,爬了雪球网5000只股票,还发现一个网站bug!

    目录 一.爬取目标 二.分析网页 三.爬虫代码 四.同步视频 五.get完整源码 一.爬取目标 您好,我是@马哥python说,今天继续分享爬虫案例. 爬取网站:雪球网的沪深股市行情数据 具体菜单:雪 ...

  6. CentOS7 升级 curl 到 HTTP2

    目录 文章目录 目录 编译安装 YUM 升级 编译安装 安装编译环境: yum -y groupinstall "Development Tools" yum -y install ...

  7. redis持久化存储数据(rdb和aof)

    rdb持久化存储数据 总的 redis持久化 防止数据丢失,持久化到本地,以文件形式保存 持久化的方式 ,两种 aof和 rdb模式 1.触发机制, - 手动执行save命令 - 或者配置触发条件 s ...

  8. PVT:特征金字塔在Vision Transormer的首次应用,又快又好 | ICCV 2021

    论文设计了用于密集预测任务的纯Transformer主干网络PVT,包含渐进收缩的特征金字塔结构和spatial-reduction attention层,能够在有限的计算资源和内存资源下获得高分辨率 ...

  9. 大数据Hadoop集群的扩容及缩容(动态添加删除节点)

    添加白名单和黑名单 白名单,表示在白名单的主机IP地址可以用来存储数据 企业中:配置白名单,可以尽量防止黑客恶意访问攻击. 配置白名单步骤如下:原文:sw-code 1)在NameNode节点的/op ...

  10. 【Sqlserver】查看所有数据库的大小 创建日期 名称 版本级别 状态

    EXEC  sp_helpdb