模块说明
MolanDev Cloud 采用 Maven 多模块结构,清晰的模块划分便于开发和维护。
整体结构
molandev-backend/
├── molandev-apis/ # API 接口定义(Feign 接口)
├── molandev-common/ # 公共模块
├── molandev-base/ # 基础服务(用户/角色/菜单/文件/消息/任务)
├── molandev-knowledge/ # 知识库服务(RAG 检索增强生成)
├── molandev-xiuxian/ # AI 修仙服务(AI 对话、技能系统)
├── molandev-gateway/ # 微服务网关
├── molandev-standalone-service/ # 单体模式启动入口
└── deploy/ # 部署配置
├── compose/ # Docker Compose 配置
├── configs/ # 配置文件
└── sql/ # 数据库脚本设计理念
服务拆分不再按功能垂直划分,而是按业务域聚合。molandev-base 整合了系统管理、文件、消息、任务等基础能力,molandev-knowledge 和 molandev-xiuxian 专注于 AI 相关业务。单体模式通过 molandev-standalone-service 启动,微服务模式通过 molandev-gateway + 各服务独立部署。
模块详解
1. API 模块 (molandev-apis)
职责: 定义服务间调用的 Feign 接口和 DTO。
特点:
- 接口定义与实现分离
- 支持单体和微服务双模
- 统一的 API 规范
示例:
// Feign 接口定义
@FeignClient(
name = "${molandev.service-name.molandev-base:molandev-base}",
contextId = "sysUserApi",
path = "/feign/user"
)
public interface SysUserApi {
@GetMapping("/admin")
UserDto getAdmin(@RequestParam("id") String id);
}接口即服务
通过 molandev-rpc 框架,Feign 接口在单体模式下自动转为本地调用,微服务模式下为远程 HTTP 调用,业务代码无需感知差异。
2. 基础服务 (molandev-base)
职责: 基础业务服务,整合了系统管理、文件、消息、任务等功能。
包含功能:
| 功能 | 包路径 | 说明 |
|---|---|---|
| 系统管理 | sys/ | 用户、角色、菜单、部门、字典 |
| 文件管理 | file/ | 文件上传下载、回收站 |
| 消息管理 | msg/ | 消息发送、站内信、WebSocket 推送 |
| 任务调度 | task/ | 定时任务管理 |
启动类:
@SpringBootApplication
public class BaseApp {
public static void main(String[] args) {
SpringApplication.run(BaseApp.class, args);
}
}服务整合
molandev-base 整合了原 sys-service、file-service、msg-service、task-service 的所有功能,减少服务间通信开销,简化部署和运维。
3. 知识库服务 (molandev-knowledge)
职责: RAG 检索增强生成,文档摄入、向量化、检索。
包含功能:
| 功能 | 包路径 | 说明 |
|---|---|---|
| 文档摄入 | ingest/ | 文档格式转换、智能分片、向量化存储 |
| 检索系统 | retrieval/ | 向量检索、混合检索、重排序 |
| RAG 问答 | rag/ | Standard RAG、Agent RAG |
4. AI 修仙服务 (molandev-xiuxian)
职责: AI 对话、技能系统、工具调用。
包含功能:
| 功能 | 包路径 | 说明 |
|---|---|---|
| AI 对话 | chat/ | 多模型对话、流式响应 |
| 技能系统 | skill/ | Meta-Tool 模式、动态技能加载 |
| 工具调用 | tool/ | 函数调用、权限控制 |
5. 网关服务 (molandev-gateway)
职责: 微服务模式的统一入口、路由转发、认证鉴权。
技术栈:
- Spring Cloud Gateway (WebFlux)
- Redis Reactive
- Knife4j Gateway
核心功能:
| 功能 | 说明 |
|---|---|
| 路由转发 | 根据路径转发到对应服务 |
| 认证鉴权 | 统一 Token 验证 |
| 权限转发 | 按前缀过滤权限码,转发给后端服务 |
| 限流熔断 | 请求限流,保护后端 |
6. 单体模式入口 (molandev-standalone-service)
职责: 单体模式的启动入口,合并 base、knowledge、xiuxian 模块。
实现方式:
- 通过
@ComponentScan合并扫描多个模块 - 排除微服务相关依赖(Nacos、Feign、RabbitMQ)
- 共享数据库连接
启动类:
@SpringBootApplication
@ComponentScan({
"com.molandev.base",
"com.molandev.knowledge",
"com.molandev.xiuxian"
})
public class StandaloneApp {
public static void main(String[] args) {
SpringApplication.run(StandaloneApp.class, args);
}
}7. 公共模块 (molandev-common)
职责: 公共工具类、基础配置、统一响应等。
包含内容:
| 包路径 | 说明 |
|---|---|
annotation/ | 自定义注解(@HasPermission、@OpLog) |
config/ | 配置类(MyBatis Plus、Redis) |
constant/ | 常量定义 |
core/ | 核心类(JsonResult、PageQuery) |
enums/ | 枚举类 |
exception/ | 异常定义 |
utils/ | 工具类 |
核心类:
// 统一响应
@Data
public class JsonResult<T> implements Serializable {
private String code; // 状态码
private String msg; // 消息
private T data; // 数据
}依赖关系
molandev-standalone-service / molandev-gateway (应用入口)
↓ 依赖
molandev-base / molandev-knowledge / molandev-xiuxian (业务服务)
↓ 依赖
molandev-apis (API 层)
↓ 依赖
molandev-common (公共层)
↓ 依赖
molandev-framework (框架层)包命名规范
com.molandev.{module}
├── controller # 控制器
├── service # 服务类(直接继承 ServiceImpl)
├── mapper # 数据访问
├── entity # 实体类
├── dto # 数据传输对象
├── enums # 枚举
├── constant # 常量
├── config # 配置类
└── utils # 工具类命名示例:
| 类型 | 命名规则 | 示例 |
|---|---|---|
| 实体类 | {Name}Entity | SysUserEntity |
| 服务类 | {Name}Service | SysUserService |
| Mapper | {Name}Mapper | SysUserMapper |
| Controller | {Name}Controller | SysUserController |
API 分离设计
为什么要分离 API?
- 服务契约: API 定义作为服务间的契约
- 依赖隔离: 调用方只需依赖 API,不需依赖实现
- 版本管理: API 可独立版本化,避免稳定性问题
- 循环依赖: 避免服务间的循环依赖
使用示例
// 1. API 定义 (molandev-apis)
@FeignClient(name = "${molandev.service-name.molandev-base:molandev-base}")
public interface UserApi {
@GetMapping("/user/get")
UserVO getUser(@RequestParam("id") Long id);
}
// 2. 服务实现 (molandev-base)
@Service
public class UserServiceImpl implements UserApi {
@Override
public UserVO getUser(Long id) {
// 实现逻辑
}
}
// 3. 其他服务调用 (molandev-xiuxian)
@Service
public class XiuxianService {
@Autowired
private UserApi userApi; // 只依赖 API,不依赖实现
public void process() {
UserDto user = userApi.getAdmin("1");
// Single 模式: 本地调用
// Cloud 模式: HTTP 远程调用
}
}如何新增模块
1. 创建 API 模块
<!-- molandev-apis/your-api/pom.xml -->
<dependencies>
<dependency>
<groupId>com.molandev</groupId>
<artifactId>molandev-common</artifactId>
</dependency>
</dependencies>定义 Feign 接口:
@FeignClient(
name = "${molandev.service-name.your-service:your-service}",
path = "/feign/your"
)
public interface YourApi {
@GetMapping("/get")
YourDto get(@RequestParam("id") String id);
}2. 创建业务模块
<!-- your-service/pom.xml -->
<dependencies>
<dependency>
<groupId>com.molandev</groupId>
<artifactId>your-api</artifactId>
</dependency>
</dependencies>创建启动类:
@SpringBootApplication
public class YourApp {
public static void main(String[] args) {
SpringApplication.run(YourApp.class, args);
}
}3. 添加到单体模式(可选)
如果需要在单体模式下使用,修改 molandev-standalone-service/pom.xml:
<dependency>
<groupId>com.molandev</groupId>
<artifactId>your-service</artifactId>
</dependency>并在 StandaloneApp 中添加包扫描:
@ComponentScan({
"com.molandev.base",
"com.molandev.knowledge",
"com.molandev.your" // 添加你的模块
})最佳实践
1. 模块职责单一
每个模块只负责一个领域的功能,避免职责混乱。
2. 依赖管理
- API 模块不依赖具体实现
- 服务模块依赖 API 模块
- 避免循环依赖
3. 代码分层
严格遵循分层架构:Controller → Service → Mapper
4. 命名规范
- 类名:大驼峰
- 方法名:小驼峰
- 常量:全大写下划线分隔
总结
MolanDev Cloud 的模块结构特点:
- ✅ 模块化设计: 清晰的模块划分
- ✅ API 分离: 接口与实现分离
- ✅ 服务整合: base 模块整合基础功能
- ✅ 双模支持: 单体和微服务
- ✅ 易于扩展: 新增模块简单