/// <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); }
/// <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); }