1 章节介绍
2 消息通知模块的设计原理
- 数据库设计
- 消息和用户是一对一的关系
- MySQL无法支撑海量数据存储
- 使用MongoDB存储消息记录
- message存储消息主体
- message_ref存储接收人
- 消息的推送与收取
3 RabbitMQ入门
- 支持同步和异步两种模式
- 比其他MQ产品更可靠
- 利用Docker安装
docker pull rabbitmq:3.9.7
docker run -d -p 5672:5672 -p 15672:15672 --name st_rabbitmq rabbitmq:3.9.7
docker run -id --name=st_rabbit \
-p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15672:15672 -p 25672:25672 \
rabbitmq:3.9.7
docker ps
docker exec -it 镜像ID /bin/bash
rabbitmq-plugins enable rabbitmq_management
- 五种队列模式
- 简单模式
- Work模式
- 发布/订阅模式
- 路由模式
- 主题模式
- 支持消息持久化
4 消息模块数据模型设计
- MongoDB的ORM很简单
- 定义Message和MessageRef映射类
- 特殊属性
- readFlag代表该条消息是否已读
- lastFlag代表消息是最新接收的
- 学习MongoDB的联合查询
- MongoDB不支持表连接
- aggregate函数将两个集合连接在一起
5 消息模块数据模型设计
db.message.insert({
_id:ObjectId("600bea9ab5bafb311f147506"),
uuid:"bfcb7c47-5886-c528-5127-ce285bc2322a",
senderId:0,
senderPhoto:"https://static-1258386385.cos.ap-beijing.myqcloud.com/img/System.jpg",
senderName:"Emos系统",
msg:"HelloWord",
sendTime:ISODate("2021-01-23T17:21:30Z")
});
db.message_ref.insert({
_id:ObjectId("600beaf0d6310000830036f3"),
messageId:"600bea9ab5bafb311f147506",
receiverId:1,
readFlag:false,
lastFlag:true
});
db.message.aggregate(
{
$set:{
"id":{$toString:"$_id"}
}
},
{
$lookup:{
from:"message_ref",
localField:"id",
foreignField:"messageId",
as:"ref"
}
},
{ $match:{"ref.receiverId":1} },
{ $sort:{sendTime:-1} },
{ $skip:0 },
{ $limit:50 }
);
6 设计消息模块的持久层(一)
编写后端代码
- 业务接口
- 刷新消息模块
- 获取分页消息
- 根据ID查询消息
- 把未读消息更新成已读
- 删除消息
- 定义线程任务类
- 注册后发送系统消息
- 登陆后接收系统消息
- 首页定时轮询接收消息
7 设计消息模块的持久层(二)
8 设计消息模块的业务层
9 设计消息模块的Web层
10 利用RabbitMQ实现消息投递削峰填谷(一)
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.12.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
11 利用RabbitMQ实现消息投递削峰填谷(二)
12 执行系统消息异步收发(一)
13 执行系统消息异步收发(二)
14 设计系统消息列表页面
15 系统消息列表页面加载分页数据
16 实现系统消息页面(一)
17 实现系统消息页面(二)
18 章节总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了