# Gateway 实体变更记录 **变更日期:** 2026-03-04 **Platform 版本:** 1.0.12 --- ## 变更概述 Platform 1.0.12 对 Gateway 相关实体进行了重构,主要变化是将实例(Instance)内嵌到集群(Cluster)中,简化了领域模型。 --- ## 实体变更 ### 1. GwDestination(新增 - 原 GatewayInstance) **旧名称:** GatewayInstance **新名称:** GwDestination **类型:** 值对象(内嵌于 GwCluster) ```csharp public class GwDestination { public string DestinationId { get; set; } // 目标标识 public string Address { get; set; } // 后端地址 public string? Health { get; set; } // 健康检查端点 public int Weight { get; set; } = 1; // 权重 public int HealthStatus { get; set; } = 1; // 健康状态 public int Status { get; set; } = 1; // 状态 } ``` ### 2. GwCluster(重构 - 原 GatewayCluster) **旧名称:** GatewayCluster **新名称:** GwCluster **类型:** 聚合根 **主要变化:** - 包含 `List Destinations` 作为内嵌集合 - 包含 `GwLoadBalancingPolicy` 负载均衡策略 - 包含 `GwHealthCheckConfig` 健康检查配置 - 包含 `GwSessionAffinityConfig` 会话亲和配置 ### 3. GwTenantRoute(重构 - 原 GatewayRoute) **旧名称:** GatewayRoute **新名称:** GwTenantRoute **类型:** 实体 **主要变化:** - 通过 `ClusterId` 关联到 `GwCluster` - 包含 `GwRouteMatch` 路由匹配配置 - 支持 `GwLoadBalancingPolicy` 路由级别负载均衡覆盖 --- ## 接口变更 ### IInstanceStore(已移除) **状态:** 已移除 **原因:** 实例(Destination)现在是 GwCluster 的内嵌对象,不再需要独立的 IInstanceStore 接口。 ### IClusterStore(新增) ```csharp public interface IClusterStore { // Basic CRUD Task FindByIdAsync(string? id, CancellationToken cancellationToken = default); Task FindByClusterIdAsync(string clusterId, CancellationToken cancellationToken = default); Task> GetAllAsync(CancellationToken cancellationToken = default); Task> GetPagedAsync(int page, int pageSize, string? clusterId = null, string? name = null, int? status = null, CancellationToken cancellationToken = default); Task GetCountAsync(string? clusterId = null, string? name = null, int? status = null, CancellationToken cancellationToken = default); Task CreateAsync(GwCluster cluster, CancellationToken cancellationToken = default); Task UpdateAsync(GwCluster cluster, CancellationToken cancellationToken = default); Task DeleteAsync(GwCluster cluster, CancellationToken cancellationToken = default); // Destination management (NEW) Task AddDestinationAsync(string clusterId, GwDestination destination, CancellationToken cancellationToken = default); Task UpdateDestinationAsync(string clusterId, string destinationId, GwDestination destination, CancellationToken cancellationToken = default); Task RemoveDestinationAsync(string clusterId, string destinationId, CancellationToken cancellationToken = default); } ``` --- ## 架构变化 ### 旧架构 ``` Route → ClusterId → Instance (独立实体) ``` ### 新架构 ``` TenantRoute → ClusterId → GwCluster (聚合根) → List ``` --- ## Console 适配需求 由于接口变更,Console 需要进行以下适配: 1. **移除 IInstanceStore 依赖** - 移除 `IInstanceStore` 注入 - 使用 `IClusterStore` 替代 2. **更新 GatewayService** - 实例操作改为通过 `IClusterStore.AddDestinationAsync` 等方法 - 查询实例改为从 `GwCluster.Destinations` 获取 3. **更新数据模型** - GatewayInstanceDto → 从 GwDestination 映射 - GatewayClusterDto → 从 GwCluster 映射 4. **更新 API 端点** - `/instances` 相关端点可能需要调整 --- ## 相关文件 ### Platform 侧 - `Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwCluster.cs` - `Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwDestination.cs` - `Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwTenantRoute.cs` - `Fengling.Platform.Infrastructure/IClusterStore.cs` - `Fengling.Platform.Infrastructure/ClusterStore.cs` ### Console 侧(需要适配) - `src/Services/GatewayService.cs` - 需要适配新接口 - `src/Program.cs` - 需要更新依赖注入