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

news/2024/7/20 15:43:06

目录
  • 前言
  • 一、需求分析
    • 1.1发送通知
    • 1.2撤回通知
    • 1.3通知消息数
    • 1.4通知消息列表
  • 二、数据模型设计
    • 2.1概念模型
    • 2.2逻辑模型
  • 三、关键流程设计
  • 本篇小结

前言

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/45274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

在 windows 上搭建一台 Linux

前言 看这篇文章之前,首先得要给大家先介绍一下什么是虚拟机。 虚拟机是一种 软件,它可以在 一台物理服务器 上,也就是我们平时所使用的电脑,虚拟出多台逻辑服务器,这个逻辑服务器怎么理解呢? 逻辑服务器是指在物理服务器基础上,通过虚拟化技术或软件配置来划分和管理的…

中间件漏洞

Nginx Nginx不安全配置漏洞 /usr/local/soft/vulhub/nginx/insecure-configuration 1.目录穿越漏洞 http://your-ip:8081/files../2.CRLF注入漏洞 location / { return 302 https://$host$uri; } 原本的目的是为了让http的请求跳转到https上利用方式 %0d%0a%0d%0a<script>…

Day 26| 39. 组合总和 、 40.组合总和II 、 131.分割回文串

组合总和本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制 题目链接/文章讲解:https://programmercarl.com/0039.组合总和.html 视频讲解:https://www.bilibili.com/video/BV1KT4y1M7HJ 给定一个无重复元素的数组 candidates 和一个目标数…

2024嵌入式大作业

2024年上海交通大学嵌入式课程大作业 本学年是嵌入式第一次上升到4学分,即在原本的2学分的理论课程之上增设了2学分的实验课,因而成为了一门大课。 不同老师之间大作业的要求不同,所以我把我们班的实验要求罗列出来,并谈一谈我的实现方案,希望能够作为前人的智慧,起到抛砖…

【Playwright+Python】系列教程(一)环境搭建及脚本录制

一、前言 看到这个文章,有的同学会说: 六哥,你为啥不早早就写完python系列的文章。 因为有徒弟需要吧,如果你也想学自学,那这篇文章,可以说是我们结缘一起学习的开始吧! 如果对你有用,建议收藏和转发! 二、Playwright是什么? 微软开源自动化测试工具Playwright,支持…

苹果CMS 阿里云OSS插件

直接下载插件上传到CMS的addons目录解压点击启用插件点击配置插件配置完毕后进入系统菜单>附件参数配置保存方式改为阿里云OSS即可需要插件直接联系我 :vx:qianjingchuangqi本文来自博客园,作者:ikay,转载请注明原文链接:https://www.cnblogs.com/ikay/p/18255405

PPT使用技巧

PPT使用说明: 查看版本:账户 撤回次数: 自动保存: 图片压缩:(ppt图片默认是压缩的),只针对单个ppt文件 字体嵌入:解决不同电脑导致字体显示的不一样。 ppt多格式导出:如视频、图片、图片型的ppt 参考线: 默认字体: 默认样式:设置所有图形的样式清除占位符:…