コード例 #1
0
        static void Main(string[] args)
        {
            var consulClient   = new ConsulClient(config => config.Address = new Uri("http://127.0.0.1:8500"));
            var consulRegistry = new ConsulRegistry(consulClient);

            using (var server = new Server(new[] { "http://*:1234/" }))
            {
                consulRegistry.CreateServiceRegistration("console-host", 1234)
                .AddHttpCheck(
                    interval: TimeSpan.FromSeconds(10),
                    deregisterFailedAfter: TimeSpan.FromMinutes(2)
                    )
                .AddTTLCheck(
                    ttl: TimeSpan.FromSeconds(30),
                    interval: TimeSpan.FromSeconds(10),
                    deregisterFailedAfter: TimeSpan.FromMinutes(2)
                    )
                .Register()
                .Wait();

                Console.WriteLine("Registered service in Consul");

                server.Start();
            }
        }
コード例 #2
0
ファイル: ConfigFacts.cs プロジェクト: zmitov/CondenserDotNet
        public async Task CanLoadUsingConsulConfigurationProvider()
        {
            var keyname = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry(null))
            {
                await configRegistry.SetKeyAsync($"org/{keyname}/test1", _value1);

                await configRegistry.SetKeyAsync($"org/{keyname}/test2", _value2);

                await configRegistry.SetKeyAsync($"org/{keyname}/Nested/test3", _value3);

                await configRegistry.SetKeyAsync($"org/{keyname}/Nested/test4", _value4);

                await configRegistry.AddStaticKeyPathAsync($"org");

                var config = new ConfigurationBuilder()
                             .AddConfigurationRegistry(configRegistry)
                             .Build();

                var simpleSettings = new SimpleSettings();
                var configSection  = config.GetSection(keyname);
                configSection.Bind(simpleSettings);

                Assert.Equal(_value1, simpleSettings.Test1);
                Assert.Equal(_value2, simpleSettings.Test2);
                Assert.Equal(_value3, simpleSettings.Nested.Test3);
                Assert.Equal(_value4, simpleSettings.Nested.Test4);
            }
        }
コード例 #3
0
        static void Main(string[] args)
        {
            var client = new Client();

            var consulClient   = new ConsulClient(config => config.Address = new Uri("http://consul:8500"));
            var consulRegistry = new ConsulRegistry(consulClient);

            consulRegistry.CreateServiceRegistration("console-client", 80)
            .AddHttpHealthCheckEndpoint(1235)
            .AddHttpCheck(1235, TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(2))
            .Register()
            .Wait();

            while (true)
            {
                try
                {
                    var uri = consulRegistry.Discover("console-host").Result;

                    Console.WriteLine($"Quering URI: {uri}");

                    var response = client.Get(uri).Result;

                    Console.WriteLine($"Request succeded: {response}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Request failed: {ex.Message}");
                }

                Thread.Sleep(5 * 1000);
            }
        }
コード例 #4
0
        public async Task TestSingleKey()
        {
            var keyname = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry())
            {
                await configRegistry.SetKeyAsync($"org/{keyname}/test1", _value1);

                var result = await configRegistry.AddStaticKeyPathAsync($"org/{keyname}/test1", true);

                Assert.True(result);

                var value = configRegistry["test1"];

                Assert.Equal(_value1, value);
            }
        }
コード例 #5
0
ファイル: ConfigFacts.cs プロジェクト: zmitov/CondenserDotNet
        public async Task DontPickUpChangesFact()
        {
            var keyname = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry(null))
            {
                await configRegistry.SetKeyAsync($"org/{keyname}/test1", _value1);

                var result = await configRegistry.AddStaticKeyPathAsync($"org/{keyname}");

                await configRegistry.SetKeyAsync($"org/{keyname}/test1", _value2);

                await Task.Delay(500); //give some time to sync

                var firstValue = configRegistry["test1"];
                Assert.Equal(_value1, firstValue);
            }
        }
コード例 #6
0
ファイル: ConfigFacts.cs プロジェクト: zmitov/CondenserDotNet
        public async Task PickUpChangesFact()
        {
            var keyid = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry(null))
            {
                await configRegistry.SetKeyAsync($"org/{keyid}/test2", _value1);

                await configRegistry.AddUpdatingPathAsync($"org/{keyid}/");

                await Task.Delay(500);

                Assert.Equal(_value1, configRegistry["test2"]);
                await configRegistry.SetKeyAsync($"org/{keyid}/test2", _value2);

                await Task.Delay(500); //give some time to sync

                Assert.Equal(_value2, configRegistry["test2"]);
            }
        }
コード例 #7
0
ファイル: ConfigFacts.cs プロジェクト: zmitov/CondenserDotNet
        public async Task GetCallbackForKeyThatIsAdded()
        {
            var keyid = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry(null))
            {
                var e = new ManualResetEvent(false);
                configRegistry.AddWatchOnSingleKey("test1", keyValue => e.Set());

                await configRegistry.AddUpdatingPathAsync($"org/{keyid}/");

                //give it time to register
                await Task.Delay(1000);

                await configRegistry.SetKeyAsync($"org/{keyid}/test1", _value2);

                //Wait for a max of 1 second for the change to notify us
                Assert.True(e.WaitOne(2000));
            }
        }
コード例 #8
0
ファイル: ConfigFacts.cs プロジェクト: zmitov/CondenserDotNet
        public async Task TestRegister()
        {
            var keyname = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry(null))
            {
                await configRegistry.SetKeyAsync($"org/{keyname}/test1", _value1);

                await configRegistry.SetKeyAsync($"org/{keyname}/test2", _value2);

                var result = await configRegistry.AddStaticKeyPathAsync($"org/{keyname}");

                Assert.Equal(true, result);

                var firstValue  = configRegistry["test1"];
                var secondValue = configRegistry["test2"];

                Assert.Equal(_value1, firstValue);
                Assert.Equal(_value2, secondValue);
            }
        }
コード例 #9
0
ファイル: ConfigFacts.cs プロジェクト: zmitov/CondenserDotNet
        public async Task CanLoadUsingConsulJsonConfigurationProvider()
        {
            var keyname = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry(Options.Create <ConsulRegistryConfig>(new ConsulRegistryConfig()
            {
                KeyParser = new JsonKeyValueParser()
            })))
            {
                var settings = new SimpleSettings
                {
                    Test1  = _value1,
                    Test2  = _value2,
                    Nested = new SimpleNestedSettings
                    {
                        Test3 = _value3,
                        Test4 = _value4
                    }
                };

                await configRegistry.SetKeyJsonAsync($"org/{keyname}/Settings", settings);

                var config = new ConfigurationBuilder()
                             .AddConfigurationRegistry(configRegistry)
                             .Build();

                //TODO: At the moment require this line after builder as it sets parser.  Probably need to rethink this.
                await configRegistry.AddStaticKeyPathAsync($"org/{keyname}");

                var simpleSettings = new SimpleSettings();
                var configSection  = config.GetSection("Settings");
                configSection.Bind(simpleSettings);

                Assert.Equal(_value1, simpleSettings.Test1);
                Assert.Equal(_value2, simpleSettings.Test2);
                Assert.Equal(_value3, simpleSettings.Nested.Test3);
                Assert.Equal(_value4, simpleSettings.Nested.Test4);
            }
        }
コード例 #10
0
        public async Task GetCallbackForSpecificKey()
        {
            Console.WriteLine(nameof(GetCallbackForSpecificKey));
            var keyid = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry())
            {
                var e = new ManualResetEvent(false);
                configRegistry.AddWatchOnSingleKey("test1", keyValue => e.Set());

                await configRegistry.SetKeyAsync($"org/{keyid}/test1", _value1);

                await configRegistry.AddUpdatingPathAsync($"org/{keyid}/");

                await Task.Delay(1000);

                await configRegistry.SetKeyAsync($"org/{keyid}/test1", _value2);

                //Wait for a max of 1 second for the change to notify us
                Assert.True(e.WaitOne(2000));
            }
        }
コード例 #11
0
ファイル: ConfigFacts.cs プロジェクト: zmitov/CondenserDotNet
        public async Task GetCallbackForAnyKey()
        {
            Console.WriteLine(nameof(GetCallbackForAnyKey));
            var keyid = Guid.NewGuid().ToString();

            using (var configRegistry = new ConsulRegistry(null))
            {
                await configRegistry.SetKeyAsync($"org/{keyid}/test1", _value1);

                await configRegistry.AddUpdatingPathAsync($"org/{keyid}");

                var e = new ManualResetEvent(false);
                configRegistry.AddWatchOnEntireConfig(() => e.Set());

                //give the registration time to complete registration
                await Task.Delay(1000);

                await configRegistry.SetKeyAsync($"org/{keyid}/test1", _value2);

                //Wait for a max of 1 second for the change to notify us
                Assert.True(e.WaitOne(2000));
            }
        }