public void Client_DefaultConfig_env() { const string addr = "1.2.3.4:5678"; const string token = "abcd1234"; const string auth = "username:password"; Environment.SetEnvironmentVariable("CONSUL_HTTP_ADDR", addr); Environment.SetEnvironmentVariable("CONSUL_HTTP_TOKEN", token); Environment.SetEnvironmentVariable("CONSUL_HTTP_AUTH", auth); Environment.SetEnvironmentVariable("CONSUL_HTTP_SSL", "1"); Environment.SetEnvironmentVariable("CONSUL_HTTP_SSL_VERIFY", "0"); var config = new ConsulClientConfiguration(); Assert.AreEqual(addr, config.Address); Assert.AreEqual(token, config.Token); Assert.IsNotNull(config.HttpAuth); Assert.AreEqual("username", config.HttpAuth.UserName); Assert.AreEqual("password", config.HttpAuth.Password); Assert.AreEqual("https", config.Scheme); Assert.IsTrue(ServicePointManager.ServerCertificateValidationCallback(null, null, null, SslPolicyErrors.RemoteCertificateChainErrors)); Environment.SetEnvironmentVariable("CONSUL_HTTP_ADDR", string.Empty); Environment.SetEnvironmentVariable("CONSUL_HTTP_TOKEN", string.Empty); Environment.SetEnvironmentVariable("CONSUL_HTTP_AUTH", string.Empty); Environment.SetEnvironmentVariable("CONSUL_HTTP_SSL", string.Empty); Environment.SetEnvironmentVariable("CONSUL_HTTP_SSL_VERIFY", string.Empty); ServicePointManager.ServerCertificateValidationCallback = null; var client = new Client(config); Assert.IsNotNull(client); }
public void SetUp() { var clientConfig = new ConsulClientConfiguration {Address = new Uri("http://127.0.0.1:9500")}; var client = new ConsulClient(clientConfig); var adapter = new ConsulAdapter(client); var flipper = new Flipper(adapter); _feature = flipper.Feature("unobtanium"); }
public void SetUp() { var clientConfig = new ConsulClientConfiguration(); clientConfig.Address = "127.0.0.1:9500"; var client = new Client(clientConfig); var adapter = new ConsulAdapter(client); var flipper = new Flipper(adapter); _feature = flipper.Feature("unobtanium"); }
public ConsulServiceRouteManager( RpcOptionsConfiguration rpcOptionsConfiguration, ISerializer <byte[]> byteSerializer, ISerializer <string> stringSerializer, IServiceRouteFactory serviceRouteFactory, ILogger <ConsulServiceRouteManager> logger ) : base(stringSerializer) { _rpcOptionsConfiguration = rpcOptionsConfiguration; _configInfo = rpcOptionsConfiguration.ConsulClientConfiguration; _byteSerializer = byteSerializer; _serviceRouteFactory = serviceRouteFactory; _logger = logger; CreateConsul(); }
public async Task Client_SetClientOptions() { var config = new ConsulClientConfiguration() { Datacenter = "foo", WaitTime = new TimeSpan(0, 0, 100), Token = "12345" }; var client = new ConsulClient(config); var request = client.Get<KVPair>("/v1/kv/foo"); await Assert.ThrowsAsync<ConsulRequestException>(async () => await request.Execute()); Assert.Equal("foo", request.Params["dc"]); Assert.Equal("1m40s", request.Params["wait"]); Assert.Equal("12345", request.Params["token"]); }
public static IServiceCollection AddConsulClient(this IServiceCollection services, Action <ConsulClientConfiguration> action) { var config = new ConsulClientConfiguration(); action.Invoke(config); services.TryAddSingleton <ConsulConfiguration>(); services.TryAddSingleton <IConfiguration <ConsulClientConfiguration> >(serviceProvider => { var service = serviceProvider.GetRequiredService <ConsulConfiguration>(); service.SetConfiguration(config); return(service); }); return(services); }
public async Task Client_SetClientOptions() { var config = new ConsulClientConfiguration() { Datacenter = "foo", WaitTime = new TimeSpan(0, 0, 100), Token = "12345" }; var client = new ConsulClient(config); var request = client.Get <KVPair>("/v1/kv/foo"); await Assert.ThrowsAsync <ConsulRequestException>(async() => await request.Execute()); Assert.Equal("foo", request.Params["dc"]); Assert.Equal("1m40s", request.Params["wait"]); Assert.Equal("12345", request.Params["token"]); }
public async Task Client_ReuseAndUpdateConfig() { var config = new ConsulClientConfiguration(); config.Address = TestHelper.HttpUri; config.Token = TestHelper.MasterToken; #pragma warning disable CS0618 // Type or member is obsolete using (var client = new ConsulClient(config)) #pragma warning restore CS0618 // Type or member is obsolete { #pragma warning disable CS0618 // Type or member is obsolete config.DisableServerCertificateValidation = true; #pragma warning restore CS0618 // Type or member is obsolete await client.KV.Put(new KVPair("kv/reuseconfig") { Flags = 1000 }); Assert.Equal <ulong>(1000, (await client.KV.Get("kv/reuseconfig")).Response.Flags); #if !CORECLR Assert.True(client.HttpHandler.ServerCertificateValidationCallback(null, null, null, SslPolicyErrors.RemoteCertificateChainErrors)); #endif } #pragma warning disable CS0618 // Type or member is obsolete using (var client = new ConsulClient(config)) #pragma warning restore CS0618 // Type or member is obsolete { #pragma warning disable CS0618 // Type or member is obsolete config.DisableServerCertificateValidation = false; #pragma warning restore CS0618 // Type or member is obsolete await client.KV.Put(new KVPair("kv/reuseconfig") { Flags = 2000 }); Assert.Equal <ulong>(2000, (await client.KV.Get("kv/reuseconfig")).Response.Flags); #if !CORECLR Assert.Null(client.HttpHandler.ServerCertificateValidationCallback); #endif } #pragma warning disable CS0618 // Type or member is obsolete using (var client = new ConsulClient(config)) #pragma warning restore CS0618 // Type or member is obsolete { await client.KV.Delete("kv/reuseconfig"); } }
private static void Build() { var _tmpConfigurations = new Dictionary <string, object>(); var consulCfg = new ConsulClientConfiguration(); consulCfg.Address = new Uri(_consulServer); using (var client = new ConsulClient(consulCfg)) { var getPair = client.KV.Get(_consulKey).GetAwaiter().GetResult(); var data = Encoding.UTF8.GetString(getPair.Response.Value, 0, getPair.Response.Value.Length); _tmpConfigurations = JsonConvert.DeserializeObject <Dictionary <string, object> >(data); } lock (_lock) { _configurations = _tmpConfigurations; } }
private async Task <string> GetServiceUrl(string name) { var config = new ConsulClientConfiguration { Address = new Uri("http://consul:8500") }; using (var client = new ConsulClient(config)) { var response = await client.Health.Service(name, string.Empty, passingOnly : true); var serviceEntry = response.Response != null?response.Response.FirstOrDefault() : null; return((serviceEntry != null) ? string.Format("http://{0}:{1}", serviceEntry.Service.Address, serviceEntry.Service.Port) : string.Empty); } }
/// <summary> /// 实始化客户端并注册到注册中心 /// </summary> /// <remarks> /// author:catdemon /// date:2019-5-16 /// </remarks> /// <param name="componentManager"></param> private static void initConsul(IComponentManager componentManager) { /* * 创建Consul客户端 */ var consulServerSetting = _consulSetting.ConsulServerSetting; ConsulClientConfiguration consulClientConfiguration = new ConsulClientConfiguration() { Address = new Uri($"{consulServerSetting.Url}:{consulServerSetting.Port}") }; _consulClient = new ConsulClient(x => x = consulClientConfiguration);//请求注册的 Consul 地址 /* * 设置健康检查 */ var healthCheck = _consulSetting.HealthCheckSetting; var httpCheck = new AgentServiceCheck() { DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(healthCheck.DeregisterCriticalServiceAfter), //服务启动多久后注册 Interval = TimeSpan.FromSeconds(healthCheck.HeathInterval), //健康检查时间间隔,或者称为心跳间隔 HTTP = $"{healthCheck.HeathUrl}:{healthCheck.Port}{healthCheck.CheckPath}", //健康检查地址 Timeout = TimeSpan.FromSeconds(healthCheck.TimeOut) }; /* * 注册微信服信息 */ var micServerSetting = _consulSetting.MicServerSetting; var registration = new AgentServiceRegistration() { Checks = new[] { httpCheck }, ID = micServerSetting.Id.ToString(), Name = micServerSetting.Name, Address = micServerSetting.Url, Port = micServerSetting.Port, Tags = micServerSetting.Tags }; _consulClient.Agent.ServiceRegister(registration).Wait();//服务启动时注册,内部实现其实就是使用 Consul API 进行注册(HttpClient发起) }
// Issue #1 - Don't want a trailing slash, just host and port (this needs to be done at the 'Root' of the drive) public ConsulPSDriveInfo(PSDriveInfo driveInfo) : base(driveInfo.Name,driveInfo.Provider,driveInfo.Root.TrimEnd('/'),driveInfo.Description,driveInfo.Credential,driveInfo.DisplayRoot) { // TODO: Check if the consul root is valid? // TODO: Support DataCenter, HttpAuthentication // connection is specified as a URI to the consul http interface. . var consulUri = new Uri(Root); var config = new ConsulClientConfiguration { Address = consulUri.Host + ":" + consulUri.Port, Scheme = consulUri.Scheme }; // AuthToken taken from Credential UserName if available. if (driveInfo.Credential != null && !string.IsNullOrWhiteSpace(driveInfo.Credential.UserName)) config.Token = driveInfo.Credential.UserName; ConsulClient = new Client(config); }
public Net2Consul(string uri, Net2ConsulMode mode) { mutex_get = new object(); mutex_send = new object(); consul_mode = mode; updated_list = new List <AgentService>(); temp_updated_list = new List <AgentService>(); sending_queue = new List <AgentService>(); ConsulClientConfiguration config = new ConsulClientConfiguration(); config.Address = new Uri(uri); client = new ConsulClient(config); main_timer = new System.Timers.Timer(); main_timer.Interval = 1000; main_timer.Elapsed += Main_timer_Elapsed; main_timer.Start(); main_timer.Enabled = true; }
public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IApplicationLifetime lifetime, ServiceEntry serviceEntity, IConfiguration configuration) { ConsulClientConfiguration consulClientConfiguration = new ConsulClientConfiguration() { Address = new Uri($"http://127.0.0.1:8500") }; var consulClient = new ConsulClient(x => x = consulClientConfiguration);//请求注册的 Consul 地址 var httpCheck = new AgentServiceCheck() { DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5), //服务启动多久后注册 Interval = TimeSpan.FromSeconds(10), //健康检查时间间隔,或者称为心跳间隔 HTTP = $"http://localhost:51606/api/health", //健康检查地址 Timeout = TimeSpan.FromSeconds(5) }; // Register service with consul var registration = new AgentServiceRegistration() { Checks = new[] { httpCheck }, ID = "donetcore",//Guid.NewGuid().ToString(), Name = "my.servicename1", Address = "localhost", Port = 51606, Tags = new[] { $"urlprefix-/my.servicename" }//添加 urlprefix-/servicename 格式的 tag 标签,以便 Fabio 识别 }; consulClient.Agent.ServiceRegister(registration).Wait();//服务启动时注册,内部实现其实就是使用 Consul API 进行注册(HttpClient发起) lifetime.ApplicationStopping.Register(() => { consulClient.Agent.ServiceDeregister(registration.ID).Wait();//服务停止时取消注册 }); return(app); }
public ConsulPSDriveInfo(PSDriveInfo driveInfo) : base(driveInfo) { // TODO: Check if the consul root is valid? // TODO: Support DataCenter, HttpAuthentication // connection is specified as a URI to the consul http interface. Don't want a trailing slash, just host and port. var consulUri = new Uri(driveInfo.Root.TrimEnd('/')); var config = new ConsulClientConfiguration { Address = consulUri.Host + ":" + consulUri.Port, Scheme = consulUri.Scheme }; // AuthToken taken from Credential UserName if available. if (driveInfo.Credential != null && !string.IsNullOrWhiteSpace(driveInfo.Credential.UserName)) { config.Token = driveInfo.Credential.UserName; } ConsulClient = new Client(config); }
public static IConfigurationBuilder AddConsul(this IConfigurationBuilder configurationBuilder, ConsulClientConfiguration consulClientConfiguration, string folder = "") { if (consulClientConfiguration == null) { throw new ArgumentNullException(nameof(consulClientConfiguration), "The agent url can't be empty."); } if (!string.IsNullOrWhiteSpace(folder) && !folder.EndsWith("/")) { throw new ArgumentException("Folder must end with \"/\"."); } return(Add(configurationBuilder, new ConsulAgentConfiguration { ClientConfiguration = consulClientConfiguration, QueryOptions = new ConsulQueryOptions { RootFolder = folder } })); }
private void ConsulConfig(ConsulClientConfiguration c) { c.Address = new Uri("http://192.168.1.102:8500"); c.Datacenter = "dc1"; }
private void consulConfig(ConsulClientConfiguration c) { c.Address = new Uri("http://127.0.0.1:8500"); c.Datacenter = "dc1"; }
private static void ConsulConfig(ConsulClientConfiguration obj) { obj.Address = new Uri(_CONSUL_SERVER_URL); obj.Datacenter = _CONSUL_DEFAULT_DC; }
public void ConsulConifg(ConsulClientConfiguration c) { c.Address = new Uri("http://127.0.0.1:8500"); c.Datacenter = "dc1"; }
private void ServiceConfig(ConsulClientConfiguration c) { //throw new NotImplementedException(); c.Address = Configuration.GetValue <Uri>("ServiceConfig:serviceDiscoveryAddress"); }
private void SetConfig(ConsulClientConfiguration config) { config.Address = new Uri(consulServerUrl); }
private void ConfiguationConsul(ConsulClientConfiguration client) { client.Address = new Uri("http://127.0.0.1:8500"); }
static void ConfigureConsul( this IConfiguration configuration, IConfigurationBuilder configBuilder, ConsulConfigurationOptions?configOptions, IHostEnvironment env) { // Применяем переменную APPLICATION_NAME из переменных среды, // если она не задана, то используем встроенное значение env.ApplicationName. var applicationName = env.ApplicationName; if (!string.IsNullOrEmpty(configuration[ApplicationNameEnv])) { applicationName = configuration[ApplicationNameEnv]; } configOptions ??= new ConsulConfigurationOptions(); // Если находимся в DEV, то используем appsettings.development.json if (env.IsDevelopment()) { return; } // Загружаем конфигурацию подключения в Consul из примонтированного файла. var consulConfigFile = ConsulConfigFileDefault; if (!File.Exists(ConsulConfigFileDefault) && !string.IsNullOrEmpty(configuration[ConsulConfigFileEnv])) { Console.WriteLine("Consul connection file detected by environment variable."); consulConfigFile = configuration[ConsulConfigFileEnv]; } configBuilder.AddJsonFile(consulConfigFile, optional: false, reloadOnChange: false); var consulClientConfiguration = new ConsulClientConfiguration(); var consulBuilder = new ConfigurationBuilder(); consulBuilder.SetBasePath(env.ContentRootPath); consulBuilder.AddJsonFile(consulConfigFile, optional: false, reloadOnChange: false); var consulConfig = consulBuilder.Build(); if (string.IsNullOrEmpty(consulConfig[ConsulConfigFileSectionName + ":Address"])) { throw new ConsulConfigurationException($"Failed to load Consul server address from {consulConfigFile}. The wrong data format may have been used."); } var consulRoot = env.EnvironmentName?.ToLower(); if (!string.IsNullOrEmpty(consulConfig[ConsulConfigFileSectionName + ":RootFolder"])) { consulRoot = consulConfig[ConsulConfigFileSectionName + ":RootFolder"].ToLower(); } consulConfig .GetSection(ConsulConfigFileSectionName) .Bind(consulClientConfiguration); var appsettingsFileName = string.IsNullOrEmpty(configOptions.AppsettingsFileName) ? AppsettingsFile : configOptions.AppsettingsFileName; if (configOptions.UseCommonAppsettings) { var commonAppsettingsFileName = string.IsNullOrEmpty(configOptions.CommonAppsettingsFileName) ? CommonAppsettingsFile : configOptions.CommonAppsettingsFileName; configBuilder .AddConsul( $"{consulRoot}/{commonAppsettingsFileName}", options => ConfigureConsulOptions(options, consulClientConfiguration)); } // Включение конфигурации для микросервиса. configBuilder .AddConsul( $"{consulRoot}/{applicationName?.ToLower()}/{appsettingsFileName}", options => ConfigureConsulOptions(options, consulClientConfiguration)); }
private void configure(ConsulClientConfiguration config) { config.Address = $"http://localhost:{Port}".ToUri(); }
private void ConfigurationOverview(ConsulClientConfiguration obj) { obj.Address = new Uri("http://" + (EnvironmentVariables.MicroRegistryAddress ?? HostsEnv.GetIPAddress() + ":8500")); logger.Debug("Consul Client: " + obj.Address); obj.Datacenter = "dc1"; }
private void ConsulConfig(ConsulClientConfiguration config) { //throw new NotImplementedException(); config.Address = new Uri("http://localhost:8500"); //63899 config.Datacenter = "dc1"; }
private static void ConfigurationOverview(ConsulClientConfiguration obj) { obj.Address = new Uri("http://39.106.206.130:8500"); // 服务注册与发现服务器Consul地址 obj.Datacenter = "dc1"; // 名称 }
private void ConsulConfig(ConsulClientConfiguration consul) { consul.Address = new Uri(Configuration.GetSection("ApplicationConfiguration").GetSection("ConsulAddress").Value); }
private void ConsulConfig(ConsulClientConfiguration config) { //配置注册中心地址 config.Address = new Uri("http://localhost:8500"); config.Datacenter = "dc1"; }
public static IWebHostBuilder UseNethium(this IWebHostBuilder builder, Action <NethiumConfig> configureNethiumOption) { var nethiumConfig = new NethiumConfig(); configureNethiumOption(nethiumConfig); nethiumConfig.CancellationToken ??= builder.GetShutdownToken(); var bootstrapConfig = nethiumConfig.BootstrapConfig; var logger = nethiumConfig.LoggerFactory?.CreateLogger <NethiumConfig>(); if (bootstrapConfig != null) { nethiumConfig.Prefix ??= bootstrapConfig["Nethium:Consul:Prefix"] ?? throw new ArgumentNullException("Nethium:Consul:Prefix", "Consul:Prefix not specified in config"); nethiumConfig.ConfigurationPrefix ??= bootstrapConfig["Nethium:Consul:ConfigurationPrefix"] ?? nethiumConfig.Prefix; nethiumConfig.Separator ??= bootstrapConfig["Nethium:Consul:Separator"]; nethiumConfig.Watch ??= bootstrapConfig["Nethium:Consul:Watch"]; } var configurationOptions = new ConfigurationOptions { Prefix = nethiumConfig.Prefix !, ConfigurationPrefix = nethiumConfig.ConfigurationPrefix, Separator = nethiumConfig.Separator !, Watch = nethiumConfig.Watch, AutoReload = nethiumConfig.AutoReload ?? false }; var consulHandler = new ConsulHandler { ClientConfigurationOptions = ClientConfiguration(bootstrapConfig, nethiumConfig), CancellationToken = nethiumConfig.CancellationToken }; var consulBuilder = new ConsulBuilder(consulHandler); var consulClientConfiguration = new ConsulClientConfiguration(); consulHandler.ClientConfigurationOptions.Invoke(consulClientConfiguration); foreach (var pair in bootstrapConfig.AsEnumerable()) { logger?.LogInformation(pair.Key + ": " + pair.Value); } logger?.LogInformation(bootstrapConfig?["Nethium:Consul:Watch"]); logger?.LogInformation($"Using consul at address {consulClientConfiguration.Address} " + $"{(string.IsNullOrEmpty(consulClientConfiguration.Datacenter) ? "" : "datacenter " + consulClientConfiguration.Datacenter)}"); logger?.LogInformation($"Consul config prefix {configurationOptions.Prefix}" + $"{(string.IsNullOrEmpty(configurationOptions.ConfigurationPrefix) ? "" : " (" + configurationOptions.ConfigurationPrefix + ") ")}" + $"{(string.IsNullOrEmpty(configurationOptions.Watch) ? "" : "watching " + configurationOptions.Watch + (configurationOptions.AutoReload ? " auto-reload" : " no auto-reload"))}"); if (nethiumConfig.HostConfiguration) { logger?.LogInformation("Injecting Nethium config provider to host configuration"); var consulKvEndpoint = new ConsulKvEndpoint(consulBuilder, nethiumConfig.LoggerFactory?.CreateLogger <ConsulKvEndpoint>()) { WatchExceptionHandler = WatchExceptionHandler }; var configurationBuilder = new ConfigurationBuilder(); if (bootstrapConfig != null) { configurationBuilder.AddConfiguration(bootstrapConfig); } var configurationRoot = configurationBuilder .AddConsul(configurationOptions, consulHandler, consulKvEndpoint) .Build(); builder .UseConfiguration(configurationRoot); } builder .ConfigureServices(ConfigureServices(nethiumConfig, consulHandler, consulBuilder)) .ConfigureAppConfiguration(ConfigureAppConfiguration(configurationOptions, nethiumConfig, consulHandler, consulBuilder)); return(builder); }
private static void ConsulConfig(ConsulClientConfiguration c) { c.Address = new Uri("http://127.0.0.1:8500"); //consul所在的服务器 c.Datacenter = "dc1"; //设置数据中心的名称 }
private void ConsulConfig(ConsulClientConfiguration c) { c.Address = new Uri("http://127.0.0.1:8500"); c.Datacenter = "dc1"; c.Token = "p2BE1AtpwPbrxZdC6k+eXA=="; }
/// <summary> /// 返回consul配置节 /// </summary> /// <param name="obj"></param> private static void ConfigurationOverview(ConsulClientConfiguration obj) { obj.Address = new Uri(OxygenSetting.ConsulAddress); obj.Datacenter = "dc1"; }
private static void ConfigurationOverview(ConsulClientConfiguration obj) { obj.Address = new Uri("http://127.0.0.1:8500"); obj.Datacenter = "dc1"; }
public async Task Client_ReuseAndUpdateConfig() { var config = new ConsulClientConfiguration(); using (var client = new ConsulClient(config)) { config.DisableServerCertificateValidation = true; await client.KV.Put(new KVPair("kv/reuseconfig") { Flags = 1000 }); Assert.Equal<ulong>(1000, (await client.KV.Get("kv/reuseconfig")).Response.Flags); Assert.True((client.Handler as WebRequestHandler).ServerCertificateValidationCallback(null, null, null, SslPolicyErrors.RemoteCertificateChainErrors)); } using (var client = new ConsulClient(config)) { config.DisableServerCertificateValidation = false; await client.KV.Put(new KVPair("kv/reuseconfig") { Flags = 2000 }); Assert.Equal<ulong>(2000, (await client.KV.Get("kv/reuseconfig")).Response.Flags); Assert.Null((client.Handler as WebRequestHandler).ServerCertificateValidationCallback); } using (var client = new ConsulClient(config)) { await client.KV.Delete("kv/reuseconfig"); } }