コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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.");
                    }
                }
            }
        }