a7f3ee3565
同步仓库名称变更,涉及 16 个文件 66 处引用: - ai-skills: 菜单配置 - backend/guides: AI操作手册、环境配置、部署、gitnexus、opencode 工作流 - backend: 模块创建规则、通信规范、协作工作流、实施规范 - frontend: 收银设计、管理后台实施计划 - standards: 数据库设计规范
3.8 KiB
3.8 KiB
模块间通信规范
🎯 设计原则
- 松耦合 - 模块间通过 REST API 通信,禁止直接引用代码
- 接口契约 - 通过 API 定义进行协作
- 独立部署 - 每个模块可独立构建和部署
- 版本管理 - API 支持版本控制
🔗 通信方式
1. 模块 → 框架(rui-framework)
// 使用 FeignClient 调用框架服务
@FeignClient("rui-service-user")
public interface UserFeignClient {
@GetMapping("/api/v1/user/{id}")
Result<UserDTO> getUserById(@PathVariable Long id);
@GetMapping("/api/v1/user/current")
Result<UserDTO> getCurrentUser();
}
2. 模块 → 模块(如收银 → 支付)
// 通过 FeignClient 调用其他业务模块
@FeignClient("rui-payment")
public interface PaymentFeignClient {
@PostMapping("/api/v1/pay/order")
Result<PayResult> createPayOrder(@RequestBody PayOrderDTO dto);
@GetMapping("/api/v1/pay/status/{orderNo}")
Result<PayStatus> getPayStatus(@PathVariable String orderNo);
}
3. 前端 → 后端
// 前端通过网关调用服务
const API_GATEWAY = '/api';
// 调用收银服务
const cashierApi = {
createOrder: (data) => axios.post(`${API_GATEWAY}/cashier/order`, data),
getOrderList: () => axios.get(`${API_GATEWAY}/cashier/order/list`)
};
// 调用支付服务
const paymentApi = {
createPay: (data) => axios.post(`${API_GATEWAY}/pay/order`, data),
queryPayStatus: (orderNo) => axios.get(`${API_GATEWAY}/pay/status/${orderNo}`)
};
📐 API 规范
URL 设计
/api/v1/{模块}/{资源}/{操作}
示例:
- GET /api/v1/cashier/order/list 查询订单列表
- POST /api/v1/cashier/order 创建订单
- GET /api/v1/cashier/order/{id} 查询订单详情
- PUT /api/v1/cashier/order/{id} 更新订单
- DELETE /api/v1/cashier/order/{id} 删除订单
返回格式
{
"code": 200,
"message": "success",
"data": {
// 业务数据
}
}
错误处理
{
"code": 500,
"message": "支付失败:余额不足",
"data": null
}
🗄️ 数据库隔离
| 模块 | 数据库/Schema | 说明 |
|---|---|---|
| rui-service | rui_system |
系统服务数据 |
| rui-cashier | rui_cashier |
收银业务数据 |
| rui-payment | rui_payment |
支付业务数据 |
禁止:
- 直接访问其他模块的数据库
- 直接查询其他模块的表
🚀 部署架构
┌─────────────┐
│ Nginx │ ← 网关入口
└──────┬──────┘
│
┌──────▼──────┐
│ rui-gateway │ ← Spring Cloud Gateway
└──────┬──────┘
│
┌───┼───┐
▼ ▼ ▼
┌──┐ ┌──┐ ┌──┐
│用户│ │收银│ │支付│ ← 微服务模块
│服务│ │服务│ │服务│
└──┘ └──┘ └──┘
📋 开发流程
-
模块 A 需要模块 B 的接口
- 模块 A 在自身仓库定义 FeignClient 接口
- 模块 B 实现并暴露 REST API
- 不需要依赖模块 B 的代码
-
模块间数据传递
- 使用 DTO(Data Transfer Object)
- DTO 定义在各自模块,不共享
- 字段名保持一致
-
接口变更
- 向后兼容
- 版本号控制
- 通知相关模块
🔔 注意事项
- 超时设置:FeignClient 默认超时 1 秒,根据业务调整
- 熔断降级:使用 Sentinel 或 Hystrix
- 链路追踪:使用 SkyWalking 或 Zipkin
- 日志规范:统一日志格式,包含 traceId
核心原则:模块间只通过 REST API 通信,禁止任何直接代码引用!