1. 项目概述与背景
班级事务管理一直是教育场景中的高频刚需场景。传统模式下,班委们通常通过微信群、Excel表格或纸质文档来协调班级事务,这种方式存在信息分散、进度难追踪、历史记录缺失等问题。我在实际参与高校信息化建设过程中,发现班级管理场景存在几个典型痛点:
- 事务分配依赖人工通知,容易遗漏或重复
- 活动报名、投票等场景需要反复收集统计
- 考勤记录与事务进度缺乏可视化展示
- 不同班委角色权限不清晰
为解决这些问题,我们设计开发了基于微服务架构的班级事务管理系统。系统采用SpringBoot+Vue+SpringCloud技术栈,同时支持小程序端访问,实现了班委协作、事务分配、信息通知等核心功能的数字化管理。
技术选型思考:选择微服务架构而非单体架构,主要考虑到高校场景中可能存在多个班级同时使用系统的情况,需要应对突发流量(如开学季集中选课),同时不同功能模块(如考勤、通知、投票)的迭代周期和负载特征差异较大。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 整体技术架构
系统采用前后端分离的微服务架构设计,整体分为四层:
-
接入层:
- 微信小程序(Uni-app跨端方案)
- Web管理端(Vue.js+Element UI)
- API网关(SpringCloud Gateway)
-
业务服务层:
- 用户服务(SpringBoot)
- 事务服务(SpringBoot)
- 考勤服务(SpringBoot)
- 通知服务(SpringBoot)
-
支撑服务层:
- 服务注册中心(Nacos)
- 配置中心(Nacos)
- 消息队列(RabbitMQ)
- 分布式事务(Seata)
-
数据层:
- MySQL(主数据存储)
- Redis(缓存+会话管理)
- Elasticsearch(日志检索)

2.2 微服务拆分策略
根据业务边界和功能特性,将系统拆分为以下微服务:
| 服务名称 | 职责 | 技术实现 | QPS预估 |
|---|---|---|---|
| user-service | 用户认证、权限管理 | SpringBoot+JWT | 500+ |
| task-service | 事务创建、分配、状态跟踪 | SpringBoot+MyBatis | 300+ |
| attendance-service | 考勤记录、统计 | SpringBoot+Redis | 200+ |
| notice-service | 通知发布、推送 | SpringBoot+WebSocket | 400+ |
| vote-service | 投票创建、结果统计 | SpringBoot+Redis | 150+ |
服务拆分时主要考虑:
- 业务功能的内聚性
- 性能需求的差异性(如通知服务需要更高并发)
- 数据独立性的要求
- 团队协作的边界
3. 核心功能实现
3.1 分布式事务处理
班级事务中常涉及跨服务操作,例如:
- 创建事务时需同时更新用户任务列表(user-service)和事务记录(task-service)
- 完成考勤后需同步更新统计结果(attendance-service)和通知相关人员(notice-service)
我们采用Seata的AT模式解决分布式事务问题,典型实现如下:
java复制// 事务发起方(TaskServiceImpl.java)
@GlobalTransactional
public R createTask(TaskDTO taskDTO) {
// 1. 在task-service创建事务记录
taskMapper.insert(taskDTO);
// 2. 调用user-service更新用户任务列表
userFeignClient.addUserTask(taskDTO.getAssignee(), taskDTO.getId());
// 3. 调用notice-service发送通知
noticeFeignClient.sendTaskNotice(taskDTO);
if(taskDTO.getNeedVote()) {
// 4. 需要投票时调
