【求助】后台管理系统的消息发布与通知是如何设计的?

有个后台管理系统,需要有个消息通知与接收的需求
描述:
用户进入后台管理系统后,可以看到最新发布的消息(也可以理解成公告)
用户点击消息内容页面后,不再对这条消息的提醒
用户也可以对已读的消息进行删除操作

平台使用人数以1W来计算,像这样的功能,请问业务代码上是怎么考虑的,还有数据库是如何设计的?

阅读 5.5k
2 个回答

老生常谈的问题,轮询或者websocket看实际情况选吧

数据库可以考虑采用redis,当然也可以mysql

给你看一下,我这边用的消息表,仅供参考,根据实际情况调整。我这边没有考虑分表问题

CREATE TABLE `tb_message`  (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `member_id` int(10) UNSIGNED NOT NULL COMMENT '用户ID',
  `type` tinyint(3) UNSIGNED NOT NULL COMMENT '消息类型',
  `is_read` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已读',
  `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `read_time` timestamp(0) NOT NULL COMMENT '读取时间',
  `is_delete` bit(1) NOT NULL COMMENT '是否删除',
  `delete_time` timestamp(0) NOT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `member_id`(`member_id`, `is_delete`, `type`, `is_read`, `create_time`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 611 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

CREATE TABLE `tb_message_ex`  (
  `message_id` bigint(20) UNSIGNED NOT NULL COMMENT '消息ID',
  `message` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息内容',
  `data` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息数据',
  PRIMARY KEY (`message_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

方案一

websocket 当用户进入系统之后,简历websocket连接,可以随时推送消息

方案二

前端轮询查询 调用也可以随时获取到消息,但是不建议使用这个方案,会造成服务器压力很大

方案三

redis或mq消息队列,这种方案只能完成登录获取,其他时候是获取不到的

方案四

结合第一种和第四种方案,websocket + mq消息队列可以完美解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题