最近在实现一个类似于微博、网易云的消息中心模块。主要实现的功能是,将系统中的点赞、评论、@等消息做汇合。今天跟大家分享下,我们的设计和实现思路。

首先说明,我们目前是微服务的架构。所以本篇文章中对于消息中心的设计也是建立在微服务的基础上,消息中心与其他模块是互相独立的。

分析需求后,我们能会发现消息中心的角色如下图(以点赞消息为例):

针对需求,我们有如下两种存储方案。

方案一:

消息表:message。字段如下:
user_id【消息归属用户】,sender_id【发送消息的用户】,src_type【消息对应的内容来源】,src_id【帖子id】,action【动作】,content_json【内容】,create_time【消息创建时间】

字段说明:

src_type 与 src_id 主要用来标识该笔消息的来源,点击进入详情的时候需要用到。

action 字段主要用于存储操作的类型,用于区分该消息是点赞还是评论还是其他类型。

content_json 字段用来存储该笔消息展示时需要的所有内容,其中需要包括帖子内容,帖子图片,帖子创建者等等信息。

方案二:

消息表:message。字段如下:

user_id【消息归属用户】,sender_id【发送信息的用户】,src_type【消息对应的来源】,src_id【帖子id】,action【动作】,action_id【动作id】,create_time【消息创建时间】

action_id 字段主要用来查找动作的内容。当动作是点赞或评论时,不需要存该字段。当动作是评论时,通过该字段可以到消息内容表中取值。

消息内容表:message_content,字段如下:

src_type【内容来源:帖子,评论等】,src_id【内容id】,content【内容】,status【内容状态】

有人可能会奇怪,为何需要 message_content 表?其实一开始我们就有提到过,我们是微服务的架构。消息中心与其他模块是相互独立的,所以消息中心不会去各模块取值,也不应该去各模块取值,它是一个相对独立的模块。所以就需要有一个内容库去存储我们系统中的内容。方案一中的 content_json 字段,之所以需要存这么多的内容,也是同理。

接下来我们看一下两个方案的对比情况。

方案一:

优势:1.拓展性高,无论何种消息都可以扔进 message 表里 2.与其他项目的耦合度低
劣势:1.更新动作复杂 2.冗余数据较多

方案二:

优势:1.更新动作简单 2.与其他项目的耦合度低
劣势:1.拓展性较低,对存入 message_content 表中的内容,有格式要求

综合实际的业务需求,建议大家使用方案二。因为在实际场景中,我们删除帖子或删除评论等操作,都需要影响到消息中的内容状态。方案二在更新内容上具有绝对优势。假如使用方案一,更新消息内容会是一件相当头疼的事情。

如果大家有疑问或有更好的建议,欢迎讨论~

仿微博消息中心的系统设计与实现相关推荐

  1. 业务消息中心系统设计与实现(一)

    目录 解决问题场景? 那么这款内部业务消息中心需要满足哪些功能呢? 哈喽小伙伴,我是kilde,和有需要的小伙伴分享一个业务消息中心的设计思想与实现,喜欢的小伙伴可以点赞关注博主,觉得有用的也可以打赏 ...

  2. 仿淘宝开放平台之消息服务——消息中心推送消息至消费者

    消息中心收到生产者推送过来的业务消息外,一方面,需要给生产者推送一条消息确认的响应消息:另一方面,则需要根据消息主题,查找所有订阅该主题的消费者(实际就是消息客户端),将消息复制及转发出去. ​ 这种 ...

  3. Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    本文由"猫爸iYao"原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样: ▲ 微信群聊界面里的@人功能  ▲ Q ...

  4. [iOS]仿微博视频边下边播之滑动 TableView 自动播放

    注意:框架已经迭代到2.0版本,我重新架构了整个框架,API 也得到了更好的设计,我为 2.0 版本的实现写了一篇文章 [iOS]如何重新架构 JPVideoPlayer ?.此文中的实现思路仍然是一 ...

  5. [iOS]仿微博视频边下边播之滑动TableView自动播放

    Tips:这次的内容分为两篇文章讲述 01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器. 02.[iOS]仿微博视频边下边播之滑动TableView自 ...

  6. android点赞取消赞功能吗,Android 仿微博的点赞功能的实现原理(持续点赞再取消)...

    搜索热词 产品需求,实现类似微博的持续点赞再取消功能,因为自己也偶尔刷微博,对这功能有一定的使用上的了解, 至于微博点赞的具体实现我并不知道,微博点赞在断网的情况下依然能点赞,不会提示网络异常,等有网 ...

  7. 消息中心构架设计说明书

    消息中心构架设计说明书 1.文档介绍 1.1 文档目的 1.2 文档范围 1.3 读者对象 1.4 参考文献 1.5 术语与缩写解释 2 系统概述 3 设计约束 4 设计策略 5 系统总体结构 5.1 ...

  8. java微博系统源码_JAVA仿微博系统(JAVA毕业设计含源码和运行教程)

    前言 课设毕设源码收集已上传到github,包括:C,C#,C++,JAVA,PHP 等源码,更多源码在整理中.地址:https://github.com/52JDK/Source-Collectio ...

  9. 一款基于flutter的仿微博客户端(仿微博首页,视频页,聊天页面等)

    基于flutter的仿微博客户端 在学习了flutter之后,写了一个仿微博最新的10.4.0版本, 还原微博80%的界面 总共涉及到了几十个界面和接口,用到了flutter中的大部分组件 该项目分为 ...

最新文章

  1. ios 图片自动轮播
  2. Asp.net MVC突然变慢,缓存消失的一种原因
  3. android 摇一摇监听,Android摇一摇功能实现(摇一摇监听)
  4. python小数输出01_python:格式化输出(上)
  5. 吴恩达 coursera AI 专项五第三课(下)总结+作业答案
  6. output怎么用_用树莓派实现室内温度监控
  7. spring boot配置对上传文件的大小限制
  8. 动态加载js文件 document.createElement
  9. nginx 查看当前的连接数
  10. 手机游戏开发工程师培训教程
  11. ijkplayer 代码走读之 h264 解封装器应用详解
  12. 裸辞闹了个乌龙,就当做个题提升自己吧
  13. 背阔肌(06):T杠俯身划船
  14. Unity 实现图标的拖拽功能
  15. 【科创人南京行】西祠胡同创始人“响马”刘琥:一生寻找精神绿林,减区块链也许是正确方向...
  16. EMMC与Nand的区别
  17. 欢迎来到天蓝零度的官方微博发布平台
  18. 智能家居DIY之智能通断器
  19. 猿创征文 | 2023年必须掌握的DevOps工具推荐(一)
  20. vue-router之addRoutes(动态路由/权限路由)使用分析

热门文章

  1. linux dd硬盘拷贝命令,linux下用dd命令拷贝硬盘
  2. HyperV虚拟机如果使用windows loader之后引起黑屏的解决
  3. avos win32 UI api 架构
  4. 数字电路实验(十九)——CPU综合设计(15)
  5. 炫界 (978) -(建工发现应用克隆漏)_铁岭在建工地扬尘监测价格,便携粉尘浓度检测,服务靠谱...
  6. 【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 )
  7. Bpmn(业务流程模型)文档和在线Demo整理
  8. 前后端分离_博客项目
  9. 文化产业之作家年财富资料
  10. Premiere CS4