概览
根据分析,以下是 crates 目录中各库的使用情况和可补充建议:
现有 Crates 概览
核心库 (9个)
┌─────────────┬────────────────────────────────────────┬──────────────┐
│ Crate │ 功能 │ 当前使用情况 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ common │ 通用类型 (TenantId, UserId, AuditInfo) │ 所有服务 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ errors │ 统一错误处理, RFC 7807 │ 所有服务 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ config │ 配置加载, Vault 集成 │ 所有服务 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ telemetry │ 可观测性 (Tracing, Prometheus, Loki) │ 所有服务 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ ports │ 抽象 trait 层 (Repository, Cache 等) │ 所有服务 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ domain-core │ 领域核心类型 (Entity, Money, Quantity) │ 所有服务 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ cqrs-core │ CQRS 命令/查询模式 │ 所有服务 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ event-core │ 领域事件核心 │ 所有服务 │
├─────────────┼────────────────────────────────────────┼──────────────┤
│ auth-core │ JWT/RBAC 认证授权 │ 仅 2 个服务 │
└─────────────┴────────────────────────────────────────┴──────────────┘
适配器库 (11个)
┌───────────────────────┬───────────────────┬──────────────────────┐
│ Adapter │ 功能 │ 当前使用情况 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-postgres │ PostgreSQL 数据库 │ 所有服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-redis │ Redis 缓存 │ 所有服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-kafka │ Kafka 消息队列 │ 仅 3 个服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-email │ 邮件发送 │ 仅 1 个服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-clickhouse │ ClickHouse 分析 │ 仅 2 个服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-etcd │ 服务发现 │ 仅 2 个服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-elasticsearch │ 全文搜索 │ 仅 1 个服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-minio │ 对象存储 │ 仅 1 个服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-alertmanager │ 告警管理 │ 仅 2 个服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-rabbitmq │ RabbitMQ 消息队列 │ 仅 1 个服务 │
├───────────────────────┼───────────────────┼──────────────────────┤
│ adapter-vault │ Vault 密钥管理 │ 通过 config 间接使用 │
└───────────────────────┴───────────────────┴──────────────────────┘
关键补充建议
第一优先级 - 必须添加
- auth-core → 所有 44 个服务
- 目前仅 iam-identity, iam-tenant 使用
- 所有服务都需要 JWT 验证和权限检查 - adapter-email → sys-notify (通知服务竟然没有邮件功能!)
- adapter-kafka → 事件驱动服务
- fi-* (财务服务 - 审计事件)
- mf-* (制造服务 - 生产事件)
- sc-* (供应链服务)
- sd-* (销售服务)
第二优先级 - 分析与审计
adapter-clickhouse 应添加到:
- sd-an (销售分析 - 名字就是 analytics!)
- sd-rr (报表记录)
- sd-pe (绩效评估)
- cs-cb (客户行为分析)
- am-eh (设备历史)
- 所有 fi-* 服务 (财务审计追踪)
第三优先级 - 增强功能
┌───────────────────────┬────────────────────────────────────────────────────────────────────────┐
│ Adapter │ 建议添加到 │
├───────────────────────┼────────────────────────────────────────────────────────────────────────┤
│ adapter-email │ hr-ex (费用审批), cs-wc (工单通知), pm-po (采购确认), sd-so (销售确认) │
├───────────────────────┼────────────────────────────────────────────────────────────────────────┤
│ adapter-minio │ hr-ex (费用单据), cs-wc (工单附件), mf-qi (质检照片), rd-pl (产品文档) │
├───────────────────────┼────────────────────────────────────────────────────────────────────────┤
│ adapter-elasticsearch │ mdm-bp (业务伙伴搜索), mdm-material (物料搜索), cs-fd (反馈搜索) │
├───────────────────────┼────────────────────────────────────────────────────────────────────────┤
│ adapter-etcd │ 所有服务 (微服务发现) │
├───────────────────────┼────────────────────────────────────────────────────────────────────────┤
│ adapter-alertmanager │ sys-core, sys-notify (运维告警) │
└───────────────────────┴────────────────────────────────────────────────────────────────────────┘
总结
最严重的问题是 auth-core 仅被 2/46 个服务使用,这意味着大部分服务缺少认证授权能力。建议按优先级逐步补充这些依赖。
核心功能
┌─────────────────────────────────────────────────────────────┐
│ auth-core │
├─────────────────────────────────────────────────────────────┤
│ Claims - JWT 声明 (user_id, tenant_id, │
│ permissions, roles) │
│ TokenService - JWT 生成与验证 │
│ require_permission! / require_role! - 权限检查宏 │
└─────────────────────────────────────────────────────────────┘
当前架构
┌─────────────────┐
│ Gateway │
│ (auth-core) │ ← JWT 验证入口
└────────┬────────┘
│ gRPC (已认证)
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ iam-identity │ │ 其他服务 │ │ 其他服务 │
│ (auth-core) │ │ (无 auth-core)│ │ (无 auth-core)│
│ 生成 Token │ │ 信任 Gateway │ │ 信任 Gateway │
└─────────────────┘ └─────────────────┘ └─────────────────┘
关键发现
Gateway 的 middleware.rs:9 使用了 auth-core:
use auth_core::{Claims, TokenService};
这是一个 Gateway 集中认证 模式:
- Gateway 负责所有 JWT 验证
- 后端服务 通过 gRPC 接收已认证的请求,信任 Gateway
结论:其他服务是否需要 auth-core?
┌───────────────────┬────────────────────────────────────────────────┐
│ 场景 │ 是否需要 │
├───────────────────┼────────────────────────────────────────────────┤
│ JWT 验证 │ 不需要 - Gateway 已处理 │
├───────────────────┼────────────────────────────────────────────────┤
│ Token 生成 │ 不需要 - 仅 iam-identity 负责 │
├───────────────────┼────────────────────────────────────────────────┤
│ 权限检查 (细粒度) │ 可能需要 - 如果服务内部要检查 has_permission() │
└───────────────────┴────────────────────────────────────────────────┘
实际上,在当前架构下,大多数服务不需要 auth-core,因为:
- 认证在 Gateway 层完成
- Gateway 通过 gRPC metadata 传递 tenant-id 等信息
- 后端服务信任来自 Gateway 的请求
如果要增强安全性
如果希望后端服务也能做权限检查(零信任架构),可以:
- Gateway 将完整 Claims 通过 gRPC metadata 传递
- 后端服务使用 auth-core 的 Claims::has_permission() 做细粒度检查
但这不是必须的,取决于安全需求。
⏺ 根据业务场景分析,以下是真正需要补充的 adapter:
按优先级排序
第一优先级 - 明确需要
┌──────────────────┬────────────────────┬─────────────────────────────────────────────┐
│ 服务 │ 需要的 Adapter │ 理由 │
├──────────────────┼────────────────────┼─────────────────────────────────────────────┤
│ sd-an (销售分析) │ adapter-clickhouse │ 服务名就是 analytics,分析必须用 ClickHouse │
├──────────────────┼────────────────────┼─────────────────────────────────────────────┤
│ sys-notify │ adapter-email │ 通知服务没有邮件发送能力是不完整的 │
└──────────────────┴────────────────────┴─────────────────────────────────────────────┘
第二优先级 - 业务驱动
┌────────────────────┬────────────────────┬────────────────────────────────┐
│ 服务 │ 需要的 Adapter │ 理由 │
├────────────────────┼────────────────────┼────────────────────────────────┤
│ fi-* (6个财务服务) │ adapter-kafka │ 财务事件需要可靠传递和审计追踪 │
├────────────────────┼────────────────────┼────────────────────────────────┤
│ fi-gl (总账) │ adapter-clickhouse │ 财务报表分析 │
├────────────────────┼────────────────────┼────────────────────────────────┤
│ hr-ex (费用报销) │ adapter-minio │ 发票/收据附件存储 │
├────────────────────┼────────────────────┼────────────────────────────────┤
│ mf-qi (质量检验) │ adapter-minio │ 质检照片存储 │
├────────────────────┼────────────────────┼────────────────────────────────┤
│ cs-wc (工单) │ adapter-minio │ 工单附件 │
└────────────────────┴────────────────────┴────────────────────────────────┘
第三优先级 - 增强功能
┌─────────────────────┬───────────────────────┬─────────────────────┐
│ 服务 │ 需要的 Adapter │ 理由 │
├─────────────────────┼───────────────────────┼─────────────────────┤
│ mdm-bp (业务伙伴) │ adapter-elasticsearch │ 供应商/客户全文搜索 │
├─────────────────────┼───────────────────────┼─────────────────────┤
│ mdm-material (物料) │ adapter-elasticsearch │ 物料主数据搜索 │
├─────────────────────┼───────────────────────┼─────────────────────┤
│ cs-cb (客户行为) │ adapter-clickhouse │ 行为分析 │
└─────────────────────┴───────────────────────┴─────────────────────┘
不需要补充的
┌────────────────────────────┬──────────────────────────────────────────────────────┐
│ Adapter │ 理由 │
├────────────────────────────┼──────────────────────────────────────────────────────┤
│ adapter-kafka (大多数服务) │ 当前架构用 Outbox + Postgres,只有核心服务需要 Kafka │
├────────────────────────────┼──────────────────────────────────────────────────────┤
│ adapter-etcd │ Gateway 负责服务发现,后端服务不需要 │
├────────────────────────────┼──────────────────────────────────────────────────────┤
│ adapter-alertmanager │ 运维告警由基础设施层处理 │
├────────────────────────────┼──────────────────────────────────────────────────────┤
│ adapter-rabbitmq │ 已有 Kafka,不需要两套消息队列 │
├────────────────────────────┼──────────────────────────────────────────────────────┤
│ auth-core │ Gateway 集中认证,后端服务不需要 │
└────────────────────────────┴──────────────────────────────────────────────────────┘
总结:真正需要补充的
必须补充 (2个):
├── sd-an + adapter-clickhouse
└── sys-notify + adapter-email
建议补充 (按需):
├── fi-gl + adapter-clickhouse (财务分析)
├── hr-ex + adapter-minio (附件)
├── mf-qi + adapter-minio (质检照片)
├── cs-wc + adapter-minio (工单附件)
├── mdm-bp + adapter-elasticsearch (搜索)
└── mdm-material + adapter-elasticsearch (搜索)
核心原则:只在有明确业务需求时添加依赖,避免过度设计。
当前 Bootstrap 功能完整性
┌────────────────────────────┬───────────┐
│ 功能 │ 状态 │
├────────────────────────────┼───────────┤
│ 配置加载(文件/Vault) │ ✅ │
├────────────────────────────┼───────────┤
│ 运行时初始化(日志、追踪) │ ✅ │
├────────────────────────────┼───────────┤
│ PostgreSQL 连接池 │ ✅ │
├────────────────────────────┼───────────┤
│ PostgreSQL 读写分离 │ ✅ │
├────────────────────────────┼───────────┤
│ Redis 连接 │ ✅ │
├────────────────────────────┼───────────┤
│ Kafka Producer │ ✅ │
├────────────────────────────┼───────────┤
│ ClickHouse 连接池 │ ✅ │
├────────────────────────────┼───────────┤
│ Etcd 客户端 │ ✅ (新增) │
├────────────────────────────┼───────────┤
│ 健康检查 HTTP 端点 │ ✅ │
├────────────────────────────┼───────────┤
│ Etcd 健康检查 │ ✅ (新增) │
├────────────────────────────┼───────────┤
│ Metrics 导出 │ ✅ │
├────────────────────────────┼───────────┤
│ 服务注册(所有启动函数) │ ✅ (修复) │
├────────────────────────────┼───────────┤
│ Graceful shutdown │ ✅ │
├────────────────────────────┼───────────┤
│ gRPC 拦截器 │ ✅ │
├────────────────────────────┼───────────┤
│ 连接重试机制 │ ✅ │
└────────────────────────────┴───────────┘
✻ Cooked for 3m 12s
❯ 下一步的计划
⏺ 让我先了解当前分支的工作进度,然后给出下一步计划建议。
⏺ Explore(探索 iam-tenant 分支进度)
⎿ Done (26 tool uses · 63.2k tokens · 1m 45s)
⏺ 下一步计划建议
根据当前 iam-tenant 分支的进度分析,服务实现已基本完成(95%)。以下是建议的下一步计划:
阶段一:验证与测试(建议优先)
┌──────────────────────┬──────────────────────────────────────────┬────────┐
│ 任务 │ 说明 │ 优先级 │
├──────────────────────┼──────────────────────────────────────────┼────────┤
│ 运行数据库迁移 │ ./scripts/migrate-database.sh iam-tenant │ 高 │
├──────────────────────┼──────────────────────────────────────────┼────────┤
│ 初始化超级管理员 │ ./scripts/init-super-admin.sh │ 高 │
├──────────────────────┼──────────────────────────────────────────┼────────┤
│ 启动 iam-tenant 服务 │ 验证服务能正常启动 │ 高 │
├──────────────────────┼──────────────────────────────────────────┼────────┤
│ 启动 gateway │ 验证 REST API 能正常访问 │ 高 │
├──────────────────────┼──────────────────────────────────────────┼────────┤
│ 端到端测试 │ 测试租户创建、查询等核心流程 │ 中 │
└──────────────────────┴──────────────────────────────────────────┴────────┘
---
阶段二:代码质量(可选)
┌────────────────────────────────────┬────────────────────────────────┬────────┐
│ 任务 │ 说明 │ 优先级 │
├────────────────────────────────────┼────────────────────────────────┼────────┤
│ 清理编译警告 │ 25 个未使用变量警告 │ 低 │
├────────────────────────────────────┼────────────────────────────────┼────────┤
│ 补充 DATABASE_MIGRATION_PATTERN.md │ 文档为空 │ 低 │
├────────────────────────────────────┼────────────────────────────────┼────────┤
│ 添加集成测试 │ Repository、Handler、gRPC 测试 │ 中 │
└────────────────────────────────────┴────────────────────────────────┴────────┘
---
阶段三:其他服务集成
┌─────────────────────────────────┬─────────────────────┬────────┐
│ 任务 │ 说明 │ 优先级 │
├─────────────────────────────────┼─────────────────────┼────────┤
│ iam-identity 与 iam-tenant 集成 │ 用户需要关联租户 │ 高 │
├─────────────────────────────────┼─────────────────────┼────────┤
│ iam-access 与 iam-tenant 集成 │ 权限需要租户隔离 │ 高 │
├─────────────────────────────────┼─────────────────────┼────────┤
│ 其他业务服务租户化改造 │ 添加 tenant_id 字段 │ 中 │
└─────────────────────────────────┴─────────────────────┴────────┘
---
阶段四:生产准备
┌────────────────┬────────────────────────────┬────────┐
│ 任务 │ 说明 │ 优先级 │
├────────────────┼────────────────────────────┼────────┤
│ Kafka 事件发布 │ 替换 LoggingEventPublisher │ 中 │
├────────────────┼────────────────────────────┼────────┤
│ Redis 缓存验证 │ 确保缓存层正常工作 │ 中 │
├────────────────┼────────────────────────────┼────────┤
│ 性能测试 │ 压测租户查询、配额检查 │ 低 │
├────────────────┼────────────────────────────┼────────┤
│ 部署文档 │ K8s/Docker 部署指南 │ 中 │
└────────────────┴────────────────────────────┴────────┘
建议立即执行
1. 运行迁移和初始化
./scripts/migrate-database.sh iam-tenant && ./scripts/init-super-admin.sh
2. 启动 iam-tenant 服务
cd services/iam-tenant && cargo run
3. 另一个终端启动 gateway
cd gateway && cargo run
浙公网安备 33010602011771号