Exemple #1
0
        public async Task StopAsync()
        {
            _logger.LogInformation("Unregistering from Nacos");

            var removeRequest = new RemoveInstanceRequest
            {
                ServiceName = _options.ServiceName,
                Ip          = uri.Host,
                Port        = uri.Port,
                GroupName   = _options.GroupName,
                NamespaceId = _options.Namespace,
                ClusterName = _options.ClusterName,
                Ephemeral   = false
            };

            for (int i = 0; i < 3; i++)
            {
                try
                {
                    var flag = await _client.RemoveInstanceAsync(removeRequest);

                    _logger.LogDebug("remove instance, status = {0}", flag);
                    break;
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "Unregistering error, count = {0}", i + 1);
                }
            }

            _timer?.Change(Timeout.Infinite, 0);
            _timer?.Dispose();
        }
        public async Task StopAsync(CancellationToken cancellationToken)
        {
            _logger.LogWarning("Unregistering from Nacos, serviceName={0}", _options.ServiceName);

            var removeRequest = new RemoveInstanceRequest
            {
                ServiceName = _options.ServiceName,
                Ip          = uri.Host,
                Port        = uri.Port,
                GroupName   = _options.GroupName,
                NamespaceId = _options.Namespace,
                ClusterName = _options.ClusterName,
                Ephemeral   = true
            };

            for (int i = 0; i < 3; i++)
            {
                try
                {
                    _logger.LogWarning("begin to remove instance, {0}", JsonConvert.SerializeObject(removeRequest));
                    var flag = await _client.RemoveInstanceAsync(removeRequest);

                    _logger.LogWarning("remove instance, status = {0}", flag);
                    break;
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "Unregistering error, count = {0}", i + 1);
                }
            }

            _timer?.Change(Timeout.Infinite, 0);
        }
Exemple #3
0
        public async Task AddRemoveBeatAsync_Should_Succeed()
        {
            var request = new RegisterInstanceRequest
            {
                ServiceName = "testservice",
                Ip          = "192.168.0.74",
                Ephemeral   = true,
                Port        = 9999
            };

            var resA = await _namingClient.RegisterInstanceAsync(request);

            await Task.Delay(10000);

            var requestA = new RemoveInstanceRequest
            {
                ServiceName = "testservice",
                Ip          = "192.168.0.74",
                Ephemeral   = true,
                Port        = 9999
            };
            var resB = await _namingClient.RemoveInstanceAsync(requestA);

            await Task.Delay(10000);

            Assert.True(true);
        }
Exemple #4
0
        public static IApplicationBuilder UseNacosAspNetCore(this IApplicationBuilder app)
        {
            var namingClient          = app.ApplicationServices.GetRequiredService <INacosNamingClient>();
            var nacosAspNetCoreConfig = app.ApplicationServices.GetRequiredService <IOptions <NacosAspNetCoreOptions> >();
            var logger   = app.ApplicationServices.GetRequiredService <ILoggerFactory>().CreateLogger("Nacos.AspNetCore");
            var lifetime = app.ApplicationServices.GetRequiredService <IApplicationLifetime>();

            if (!(app.Properties["server.Features"] is FeatureCollection features))
            {
                return(app);
            }

            var addresses = features.Get <IServerAddressesFeature>();
            var address   = addresses.Addresses.First();

            var uri = new Uri(address);

            //var registrerRequest = new RegisterInstanceRequest
            //{
            //    ServiceName = nacosAspNetCoreConfig.Value.ServiceName,
            //    Ip = uri.Host,
            //    Port = uri.Port,
            //    GroupName = nacosAspNetCoreConfig.Value.GroupName,
            //    NamespaceId = nacosAspNetCoreConfig.Value.Namespace,
            //    ClusterName = nacosAspNetCoreConfig.Value.ClusterName,
            //    Enable = true,
            //    Ephemeral = false,
            //};

            var timer = new Timer(async x =>
            {
                await SendAsync(namingClient, nacosAspNetCoreConfig.Value, uri, logger);
            }, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));

            lifetime.ApplicationStopping.Register(() =>
            {
                logger.LogInformation("Unregistering from Nacos");

                var removeRequest = new RemoveInstanceRequest
                {
                    ServiceName = nacosAspNetCoreConfig.Value.ServiceName,
                    Ip          = uri.Host,
                    Port        = uri.Port,
                    GroupName   = nacosAspNetCoreConfig.Value.GroupName,
                    NamespaceId = nacosAspNetCoreConfig.Value.Namespace,
                    ClusterName = nacosAspNetCoreConfig.Value.ClusterName,
                    Ephemeral   = false
                };

                namingClient.RemoveInstanceAsync(removeRequest).ConfigureAwait(true);
            });

            return(app);
        }
        public void Deregister(INacosRegistration registration)
        {
            RemoveInstanceRequest request = new RemoveInstanceRequest()
            {
                Ip          = registration.Host,
                Port        = registration.Port,
                ServiceName = registration.ServiceId
            };

            _nacosClient.RemoveInstanceAsync(request);
        }
Exemple #6
0
        public async Task RemoveInstance_Should_Succeed()
        {
            var request = new RemoveInstanceRequest
            {
                ServiceName = "testservice",
                Ip          = "192.168.0.74",
                Port        = 9999
            };

            var res = await _namingClient.RemoveInstanceAsync(request);

            Assert.True(res);
        }
Exemple #7
0
        public Task ShutdownAsync()
        {
            var tempRegistration = _registrar.Registration;
            var removeRequest    = new RemoveInstanceRequest
            {
                ServiceName = tempRegistration.ServiceId,
                Ip          = tempRegistration.Host,
                Port        = tempRegistration.Port,
                GroupName   = tempRegistration.GroupName,
                NamespaceId = tempRegistration.Namespace,
                ClusterName = tempRegistration.ClusterName,
                Ephemeral   = tempRegistration.Ephemeral
            };

            return(_client.RemoveInstanceAsync(removeRequest));
        }
Exemple #8
0
        public IHttpActionResult RemoveServiceInstance(RemoveInstanceRequest request)
        {
            var config   = Owin.ApiGateway.Configuration.Configuration.Current;
            var endpoint = config.Endpoints.FirstOrDefault(e => e.Id.Equals(request.EndpointId));

            if (endpoint != null)
            {
                var instance = endpoint.Instances.Instance.FirstOrDefault(i => i.Url.Equals(request.InstanceUrl));

                if (instance != null)
                {
                    endpoint.Instances.Instance.Remove(instance);

                    this.SaveAndNotify(config);
                    return(this.Ok());
                }
            }

            return(this.NotFound());
        }
Exemple #9
0
        public static IApplicationBuilder UseNacosAspNetCore(this IApplicationBuilder app)
        {
            var namingClient          = app.ApplicationServices.GetRequiredService <INacosNamingClient>();
            var nacosAspNetCoreConfig = app.ApplicationServices.GetRequiredService <IOptions <NacosAspNetCoreOptions> >();
            var logger = app.ApplicationServices.GetRequiredService <ILoggerFactory>().CreateLogger("Nacos.AspNetCore");

            var uri = GetUri(app, nacosAspNetCoreConfig.Value);

            var timer = new Timer(async x =>
            {
                await SendAsync(namingClient, nacosAspNetCoreConfig.Value, uri, logger);
            }, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));

            var lifetime = app.ApplicationServices.GetRequiredService <IHostApplicationLifetime>();

            lifetime.ApplicationStopping.Register(() =>
            {
                logger.LogInformation("Unregistering from Nacos");

                var removeRequest = new RemoveInstanceRequest
                {
                    ServiceName = nacosAspNetCoreConfig.Value.ServiceName,
                    Ip          = uri.Host,
                    Port        = uri.Port,
                    GroupName   = nacosAspNetCoreConfig.Value.GroupName,
                    NamespaceId = nacosAspNetCoreConfig.Value.Namespace,
                    ClusterName = nacosAspNetCoreConfig.Value.ClusterName,
                    Ephemeral   = false
                };

                namingClient.RemoveInstanceAsync(removeRequest).ConfigureAwait(true);

                timer.Change(Timeout.Infinite, 0);
                timer.Dispose();
            });

            return(app);
        }