/// <summary> /// KongApplication /// </summary> /// <param name="local"></param> /// <param name="kong"></param> /// <param name="logger"></param> /// <param name="configuration"></param> public KongApplication(IOptions <KongOptions> local, IKongAdminApi kong, ILogger <IKongAdminApi> logger, IConfiguration configuration) { this.local = local.Value; this.kong = kong; this.logger = logger; this.httpPort = GetServerPort(configuration); }
/// <summary> /// 使用kong /// </summary> /// <param name="kong"></param> /// <param name="local"></param> /// <param name="logger"></param> /// <returns></returns> private static async Task UseKongAsync(KongOptions local, IKongAdminApi kong, ILogger <IKongAdminApi> logger) { var service = await kong.GetServiceAsync(local.Service.Name); if (service == null) { logger.LogInformation($"正在添加服务{local.Service.Name}"); service = await kong.AddServiceAsync(local.Service); logger.LogInformation($"添加服务{local.Service.Name} ok."); } var routes = await kong.GetRoutesAsync(service.Id); foreach (var localRoute in local.Service.Routes) { var route = routes.Data.FirstOrDefault(item => item.Name == localRoute.Name); if (route != null) { logger.LogInformation($"正在更新路由{route.Name}"); localRoute.Service = new KongObject { Id = service.Id }; await kong.UpdateRouteAsync(route.Id, localRoute); logger.LogInformation($"更新路由{route.Name} ok."); } else { logger.LogInformation($"正在添加路由{localRoute.Name}"); await kong.AddRouteAsync(service.Id, localRoute); logger.LogInformation($"添加路由{localRoute.Name} ok."); } } foreach (var route in routes.Data) { if (local.Service.Routes.Any(item => item.Name == route.Name) == false) { logger.LogInformation($"正在删除路由{route.Name}"); await kong.DeleteRouteAsync(route.Id); logger.LogInformation($"删除路由{route.Name} ok."); } } if (local.UpStream != null) { var upStream = await kong.GetUpstreamAsync(local.UpStream.Name); if (upStream == null) { logger.LogInformation($"正在添加上游{local.UpStream.Name}"); upStream = await kong.AddUpstreamAsync(local.UpStream); logger.LogInformation($"添加上游{local.UpStream.Name} ok."); } else { logger.LogInformation($"正在更新上游{upStream.Name}"); upStream = await kong.UpdateUpstreamAsync(upStream.Id, local.UpStream); logger.LogInformation($"更新上游{upStream.Name} ok."); } var targets = await kong.GetTargetsAsync(upStream.Id); foreach (var localTarget in local.UpStream.Targets) { var target = targets.Data.FirstOrDefault(item => item.Target == localTarget.Target); if (target != null) { if (target.Weight != localTarget.Weight) { logger.LogInformation($"正在更新上游{upStream.Name}的目标{localTarget.Target}"); await kong.DeleteTargetAsync(upStream.Id, target.Id); await kong.AddTargetAsync(upStream.Id, localTarget); logger.LogInformation($"更新上游{upStream.Name}的目标{localTarget.Target} ok."); } } else { logger.LogInformation($"正在添加上游{upStream.Name}的目标{localTarget.Target}"); await kong.AddTargetAsync(upStream.Id, localTarget); logger.LogInformation($"添加上游{upStream.Name}的目标{localTarget.Target} ok."); } } } }