6 Commits

Author SHA1 Message Date
zhangjf
8233ff8040 feat: 支持多租户专属实例(逗号分隔的租户ID列表)
功能增强:
- TENANT_ID 支持逗号分隔的多个租户 ID
- 一个实例可以服务多个指定租户

实例类型:
  共享实例:     TENANT_ID = "" (空)
  单租户专属:   TENANT_ID = "VIP_001"
  多租户专属:   TENANT_ID = "VIP_001,VIP_002,VIP_003"

路由逻辑:
  1. 解析实例 metadata.tenant-id 为租户列表
  2. 检查请求 tenantId 是否在列表中
  3. 匹配成功 → 专属实例
  4. 匹配失败 → 回退共享实例

使用场景:
  - 大客户独占实例(单租户)
  - 多个小客户共享一个实例(多租户)
  - 普通客户使用公共实例(共享)
2026-02-19 21:39:30 +08:00
zhangjf
5a2154c1a1 refactor: 简化路由逻辑,直接使用 tenantId 匹配实例
问题:tenantGroup 是 tenantId 的简单转换,造成冗余
  tenantGroup = "TENANT_" + tenantId.toUpperCase()

解决方案:
1. 直接使用 tenantId 匹配实例
   - 移除 tenantGroup 概念
   - 负载均衡器直接匹配 metadata.tenant-id

2. 简化配置
   - JWT 只需 tenantId 一个字段
   - 实例元数据只有 tenant-id

3. 前端简化
   - 请求头只需 X-Tenant-Id
   - 不再需要 X-Tenant-Group

路由规则:
  共享实例: metadata.tenant-id = "" (空)
  VIP实例:  metadata.tenant-id = "VIP_001"
  匹配逻辑: 找到匹配实例 → VIP专属,找不到 → 共享实例
2026-02-19 21:33:51 +08:00
zhangjf
e52e2ba801 refactor: 简化租户元数据,移除冗余的 tenant-id
问题:metadata 中同时配置 tenant-id 和 tenant-group,但 tenant-id 未被使用

分析:
- tenant-id: 用于数据隔离,但实际由 TenantContextHolder 提供,元数据中的值无意义
- tenant-group: 用于服务路由,负载均衡器实际只使用此字段

解决方案:
1. 移除 metadata.tenant-id 配置
2. 只保留 metadata.tenant-group
3. 更新 NacosMetadataConfig,移除 tenant-id 处理
4. 更新 docker-compose.yml,移除 TENANT_ID 环境变量

配置简化:
  修改前: tenant-id + tenant-group 两个字段
  修改后: 只有 tenant-group 一个字段

实例类型:
  共享实例: tenant-group = "" (空)
  VIP实例:  tenant-group = "TENANT_VIP_001"
2026-02-19 21:26:06 +08:00
zhangjf
330ec6dea9 refactor: 简化多租户路由配置,基于 Nacos 元数据动态匹配
问题:tenant.routing.services 配置在每个服务中重复定义 vip-tenants

解决方案:
1. TenantRoutingProperties 简化
   - 移除 services 映射(vip-tenants 列表)
   - 保留全局配置:enabled, fallback-to-shared, shared-services
   - 路由逻辑改为基于实例元数据动态匹配

2. 配置简化
   - Gateway: 只需全局配置,无需定义各服务的 vip-tenants
   - 服务实例: 只需在 Nacos metadata 中声明 tenant-group
   - 负载均衡器: 从实例 metadata 读取 tenant-group 进行匹配

3. 架构变化
   修改前:配置文件定义 vip-tenants 列表
   修改后:实例注册时声明 tenant-group,负载均衡器动态匹配

示例:
  共享实例 metadata: { tenant-group: "" }
  VIP 实例 metadata: { tenant-group: "TENANT_VIP_001" }
  请求匹配 → 路由到对应实例
2026-02-19 21:18:58 +08:00
zhangjf
2765f3f265 feat: 本地开发环境配置多租户路由
问题:fund-gateway 和 fund-sys 的 application.yml 缺少 tenant.routing 配置

修改内容:

1. fund-sys/application.yml
   - 添加 tenant.routing 配置
   - 配置 VIP 租户列表 (TENANT_VIP_001, TENANT_VIP_002)
   - 配置共享服务列表

2. fund-gateway/application.yml
   - 添加 Nacos 服务发现配置
   - 路由改为 lb:// 协议使用负载均衡
   - 添加全局跨域配置
   - 添加 tenant.routing 配置
   - 添加负载均衡日志级别
2026-02-19 21:11:08 +08:00
zhangjf
8e4afcd1a5 feat: TenantAwareLoadBalancer 整合 TenantRoutingProperties 配置
问题:TenantRoutingProperties 定义了配置但未被使用

解决方案:
1. TenantAwareLoadBalancer 注入 TenantRoutingProperties
   - 使用配置的 tenantHeader 名称
   - 使用配置的 buildTenantGroup 方法
   - 使用配置的 isSharedService 判断
   - 使用配置的 isFallbackToShared 策略

2. 新增功能
   - 支持 enabled=false 禁用租户路由
   - 共享服务跳过租户过滤
   - 可配置是否回退到共享实例

3. 更新测试适配新构造函数
2026-02-19 21:02:25 +08:00