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

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

时间:2024-06-19 09:09:46浏览次数:30  
标签:Java 解决方案 App 系统 互联网 消息 通知 设计 notification

目录

前言

消息通知系统(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,解决方案,App,系统,互联网,消息,通知,设计,notification
From: https://www.cnblogs.com/CodeBlogMan/p/18184987

相关文章

  • Java面向对象:初识多态
    1、多态多态是面向对象编程的三大基本特性之一。多态指的是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态实现条件:1、继承关系的存在2、方法的重写3、父类引用调用重写的方法例子:classAnimal{publicvoideat(){System.out.prin......
  • 项目方案:社会视频资源整合接入汇聚系统解决方案(六)
    目录 一、概述 1.1应用背景1.2总体目标1.3设计原则1.4设计依据1.5术语解释二、需求分析2.1政策分析2.2业务分析2.3系统需求三、系统总体设计3.1设计思路3.2总体架构3.3联网技术要求四、视频整合及汇聚接入4.1设计概述4.2社会视频资源分类4.3网络传......
  • JavaScript中各种源码实现
    文章目录JavaScript中各种源码实现1.实现一个new操作符2.实现一个Array.isArray3.实现一个Object.create()方法4.实现一个EventEmitter5.实现一个Array.prototype.reduce6.实现一个call或apply7.实现一个Function.prototype.bind8.实现一个JS函数柯里化9.手写防......
  • JAVA实验九
    一 算术测试Classonepackageaaa;importjava.util.Random;importjava.awt.event.*;importjavax.swing.*;publicclassOneimplementsActionListener{ intnumberOne,numberTwo; Stringoperator=""; booleanisRight; Randomrandom; intmaxInteger;......
  • ​b站视频演示效果:【web前端特效源码】使用HTML5+CSS3+JavaScript十分钟快速制作一个
    b站视频演示效果:【网页设计期末大作业源代码】使用HTML5+CSS3+JavaScript十分钟快速制作一个简约大气卡通动漫静态网站|自制超简单的卡通类网页,响应式自适应新手友效果图:完整代码:<!DOCTYPEhtml><html><head><title>Home</title><metaname="viewpor......
  • Java怎么现在支付宝沙盒支付
    一、支付环境准备支付宝的公钥和私钥支付的网关支付的APPID1、配置沙箱应用环境1、打开支付宝开放平台,官网:支付宝开放平台2、登录个人账户,然后点击控制台找到里面的沙箱3、这里能够找到APPID和支付宝网关地址和密钥二、设置内网穿透环境我用的花生壳:花生壳官网|动态域名|......
  • java基础·小白入门(一)
    目录Java语言概述Java的性质三种平台跨平台原理Java语言开发环境相关概念Java开发工具的安装Java程序的编译与运行基本注意事项Java语言基础数据类型基本数据类型引用数据类型关键字与标识符常量与变量常量变量数据类型转换常见运算符Java语言概述这一部分主要......
  • 课题分享:校园快领服务系统,基于java+SSM+mysql
     一、前言介绍     随着中国经济的快速发展和互联网技术的普及,信息管理改革确实成为了一种广泛和全面的趋势。在这一背景下,基于MySQL数据库的校园快领服务系统应运而生,这不仅体现了信息化建设在教育领域的深入应用,也展现了现代管理手段在提高工作效率和优化服务体验......
  • 课程分享:校园兼职系统,基于java+SSM+mysql
    一、前言介绍       随着社会的不断发展和科学技术的飞速进步,互联网技术已经变得越来越受到人们的欢迎。在这个快节奏的时代,我们的生活方式也变得越来越忙碌,对生活品质的要求也变得更加严格。因此,对于快速、方便的服务的需求也在逐渐增加。互联网具有许多优点,例如便利......
  • 深入理解Java虚拟机
    类加载加载java数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预先定义,引用数据类型才需要类的加载过程。类的加载,就是将java类的字节码文件加载到内存中,并通过字节码在内存中构建出类的原型---类模板对象。jvm把字节码中的常量池,类字段,类方法等信息存储到类模......