Пример #1
0
        /// <summary>
        /// 添加发现Consul配置中心
        /// </summary>
        /// <param name="services">服务</param>
        /// <param name="options">配置回调</param>
        /// <returns>服务</returns>
        public static IServiceCollection AddDiscoveryConsulConfigCenter(this IServiceCollection services, Action <UnityConsulOptions> options = null)
        {
            var unityConsulOptions = new UnityConsulOptions();

            if (options != null)
            {
                options(unityConsulOptions);
            }
            if (unityConsulOptions.ConsulBasicOption == null)
            {
                var config = new ConfigurationBuilder().AddJsonFile(unityConsulOptions.ConsulBasicOptionJsonFile).Build();
                services.Configure <ConsulBasicOption>(config);

                unityConsulOptions.ConsulBasicOption = config.Get <ConsulBasicOption>();
            }

            if (unityConsulOptions.ConsulBasicOption != null)
            {
                services.AddBasicConsul(unityConsulOptions.ConsulBasicOption);
            }
            else if (unityConsulOptions.ConsulBasicOptionJsonFile == null)
            {
                services.AddBasicConsul();
            }
            else
            {
                services.AddBasicConsul(unityConsulOptions.ConsulBasicOptionJsonFile);
            }

            services.AddUnityServicesBuilderConfigure(builder =>
            {
                if (unityConsulOptions.UnityServicesOptionsJsonFile != null)
                {
                    builder.ServiceBuilderConfigJsonFile = unityConsulOptions.UnityServicesOptionsJsonFile;
                }

                switch (unityConsulOptions.CacheType)
                {
                case ServiceProviderCacheType.TIMER_REFRESH:
                    builder.ServicesProvider = new ConsulServiceProviderAgg(unityConsulOptions.ConsulBasicOption.IntervalMillseconds, unityConsulOptions.ConsulBasicOption);

                    break;

                case ServiceProviderCacheType.DALAY_REFRESH:
                    services.AddMemoryCache(options =>
                    {
                        options.Clock = new LocalSystemClock();
                    });

                    builder.ServicesProvider = new ConsulServicesProviderMemory(Microsoft.Extensions.Options.Options.Create <ConsulBasicOption>(unityConsulOptions.ConsulBasicOption));

                    break;

                default:
                    builder.ServicesProvider = new ConsulServicesProvider(unityConsulOptions.ConsulBasicOption);

                    break;
                }
            }, (builder, file, data) =>
            {
                if (string.IsNullOrWhiteSpace(file))
                {
                    return;
                }

                builder.AddConsulConfigCenter(options: op =>
                {
                    if (unityConsulOptions.ConsulBasicOption == null)
                    {
                        if (string.IsNullOrWhiteSpace(unityConsulOptions.ConsulBasicOptionJsonFile))
                        {
                            throw new ArgumentNullException("Consul基本配置Json文件不能为空");
                        }
                        else
                        {
                            var centerOptions = unityConsulOptions.ConsulBasicOptionJsonFile.ToJsonObjectFromFile <ConfigCenterOptions>();
                            op.FillFrom(centerOptions);
                        }
                    }
                    else
                    {
                        op.FillFrom(unityConsulOptions.ConsulBasicOption);
                    }

                    var key = ConfigCenterUtil.GetKeyPath(file, op.ServiceName);
                    op.Keys.Add(key);
                });
            });

            return(services);
        }
Пример #2
0
        /// <summary>
        /// 添加服务发现Consul
        /// </summary>
        /// <param name="services">服务</param>
        /// <param name="options">配置回调</param>
        /// <returns>服务</returns>
        public static IServiceCollection AddDiscoveryConsul(this IServiceCollection services, Action <UnityConsulOptions> options = null)
        {
            var unityConsulOptions = new UnityConsulOptions();

            if (options != null)
            {
                options(unityConsulOptions);
            }
            if (unityConsulOptions.ConsulBasicOption == null)
            {
                var config = new ConfigurationBuilder().AddJsonFile(unityConsulOptions.ConsulBasicOptionJsonFile).Build();
                services.Configure <ConsulBasicOption>(config);

                unityConsulOptions.ConsulBasicOption = config.Get <ConsulBasicOption>();
            }

            if (unityConsulOptions.ConsulBasicOption != null)
            {
                services.AddBasicConsul(unityConsulOptions.ConsulBasicOption);
            }
            else if (unityConsulOptions.ConsulBasicOptionJsonFile == null)
            {
                services.AddBasicConsul();
            }
            else
            {
                services.AddBasicConsul(unityConsulOptions.ConsulBasicOptionJsonFile);
            }

            services.AddUnityServicesBuilderCache(builder =>
            {
                if (unityConsulOptions.UnityServicesOptionsJsonFile != null)
                {
                    builder.ServiceBuilderConfigJsonFile = unityConsulOptions.UnityServicesOptionsJsonFile;
                }

                switch (unityConsulOptions.CacheType)
                {
                case ServiceProviderCacheType.TIMER_REFRESH:
                    builder.ServicesProvider = new ConsulServiceProviderAgg(unityConsulOptions.ConsulBasicOption.IntervalMillseconds, unityConsulOptions.ConsulBasicOption);

                    break;

                case ServiceProviderCacheType.DALAY_REFRESH:
                    services.AddMemoryCache(options =>
                    {
                        options.Clock = new LocalSystemClock();
                    });

                    builder.ServicesProvider = new ConsulServicesProviderMemory(Microsoft.Extensions.Options.Options.Create <ConsulBasicOption>(unityConsulOptions.ConsulBasicOption));

                    break;

                default:
                    builder.ServicesProvider = new ConsulServicesProvider(unityConsulOptions.ConsulBasicOption);

                    break;
                }
            });

            return(services);
        }