本项目是我将实习期间学习到的 Spring Boot、Redis、RabbitMQ、前后端分离、消息中台架构 等内容进行整合复现,真正完成的 第一个完整可落地的后端项目。
Dasi Message Center 同时面向管理端与用户端提供完整的消息服务体系,能够帮助开发者 快速搭建自己的“全链路消息系统”,从消息创建、配置、审核,到投递、接收、存档,全流程统一、可观测、高可靠。
- B 端:包括账户管理、部门管理、联系人管理、模板配置、占位符配置、敏感词配置、消息发送、消息查询、错误日志等一体化后台功能,使业务侧能够以极低成本构建稳定、统一的消息调度与投递系统。
- C 端:提供独立设计的站内信系统,用户可在前端系统中实时查看消息、阅读通知、进行已读/未读管理、下载附件、查看回收站,实现完整的消息全流程体验。
后端:Java 17,Spring Boot 3,MySQL,MyBatis-Plus,Redis,RabbitMQ,WebSocket,JWT,OSS,Maven
前端:Vite、Vue 3、Element-Plus、Pinia、Axios、Echarts
- 支持条件查询:基于
LambdaQueryWrapper,可按关键字、状态、起止时间等精准筛选 - 支持分页查询:基于
MyBatis-Plus内置的PaginationInnerInterceptor分页插件,提供自研PageResult返回结构,可以根据传来的页码和页大小返回页面数据 - 支持数据缓存:基于
Redis + SpringCache的多级缓存机制,支持缓存精准清除
- 支持定时发送:利用
RabbitMQ的rabbitmq_delayed_message_exchange延迟插件,实现毫秒级延时投递 - 支持批量发送:
Message实体负责消息的整体内容,Dispatch实体追踪消息投递到每个联系人的结果 - 支持重发消息:前端提供按钮,可对失败的单个联系人进行投递重试
- 支持 AI 帮写:接入 DeepSeek / Kimi,可以根据需求自动生成内容文本
- 支持敏感词检测:自定义
SensitiveWord实体,自动检测文本是否包含敏感词 - 支持模版复用:自定义
Template实体,可在发送页一键加载模板内容 - 支持占位符渲染:自定义
Render实体,提供系统变量${#account}, ${#contact}, ${#date},同时也支持自定义变量${key}:value - 支持错误查询:自定义
Failure实体,可以查看错误时间,错误类型,错误信息和错误栈,提供未处理/处理中/已解决/忽略等状态切换
- 支持已读/未读:用绿色/红色背景区分已读情况,支持一键标记已读和撤回已读
- 支持回收站:利用软删除字段 deleted,实现恢复/彻底删除等操作
- 支持附件下载:依据存储的
List<url>记录可安全下载云存储的附件 - 支持在线更改联系方式:用户可在页面更新个人信息,系统自动同步到消息投递逻辑
- 检查内容长度是否合法:校验正文长度不得超过 1800 字符
- 检查定时时间是否合法:不允许早于当前,也不允许超过一个月
- 检查联系人是否可用:管理员可以设置联系人启用和禁用联系人,阻止向被禁用联系人投递
- 检查联系人是否在当前渠道有联系方式:批量发送中可能部分联系人在当前渠道的联系方式不存在
- 检查内容是否命中敏感词;可以在敏感词管理界面在线修改、添加、删除敏感词
- 检查内容是否渲染占位符成功:校验 key 是否合法且存在,实现 key 到 value 的自动映射转换
- 每个渠道都有各自的消息队列:按
MsgChannel映射到各自的Queue - 失败投递进入死信队列:依赖
x-dead-letter-exchange,由自定义的DlxExchange统一处理 - 站内信渠道:直接存入自定义的
Mailbox表 - 邮件渠道:在邮件服务器中开启 POP3/IMAP/SMTP 服务,然后利用
JavaMailSender发送邮件 - 企业微信渠道:创建企业并作为管理人创建企业应用,基于
WeComClient调用企业微信官方 API
- 支持流量校验:自定义
@RateLimit和RateLimitAspect,基于Redis + Lua实现高性能限流 - 支持管理员校验:自定义
@AdminOnly和AdminOnlyAspect,限制关键操作必须为 ADMIN - 支持唯一性校验:自定义
@UniqueField和UniqueFieldAspect,保证唯一字段不重复,避免在数据库层触发异常 - 支持存在性校验:自定义
@EnumValid和EnumValidator, 校验参数是否属于指定枚举范围 - 支持时间信息校验:自定义
@AutoFill和AutoFillAspect,自动维护创建时间与更新时间
- 自定义常量:包括
RedisConstant,SendConstant,SystemConstant等,统一维护关键常量,防止明文写入,增强维护性 - 自定义异常:包括
MessageCenterException,SendException,AccountException,ContactException,WeComException等,统一错误结构,实现代码语义化 - 自定义枚举;包括
MsgStatus,FailureStatus,MsgChannel,AccountRole,FillType,ResultInfo,保证类型安全与业务可读性
- 支持检查派送信息:筛查状态切换异常和未正确完成投递的
Dispatch,转发到死信队列处理 - 支持检查未使用的云存储文件:通过
used字段标记文件是否使用,短期内清理未使用的文件,同时清理 7 天前的所有文件
需要提前利用 Docker 安装好 MySQL、Redis、RabbitMQ,你可以通过提供的
docker-compose.yml一键初始化所有中间件,并且一定要配置好.env!
-
拉取后端镜像
docker pull dasi0227/message-center:1.0
-
启动 Dasi MessageCenter
docker run -d \ --name message-center \ --env-file .env \ --network message-net \ -p 8080:8080 \ dasi0227/message-center:1.0
-
在 VSCode 启动前端
cd FrontEnd npm install npm run dev
-
在 IDEA 启动后端
cd BackEnd ./mvnw spring-boot:run
-
先清理再编译生成 JAR
cd BackEnd ./mvnw clean package -DskipTests -
指定环境文件并运行
export $(grep -v '^#' .env | xargs) && java -jar target/message-center.jar



















