Exemple #1
0
        public void AddServiceDiscovery(Type serviceDiscovery,
                                        IServiceDiscoveryClientConfiguration serviceDiscoveryClientConfiguration,
                                        IServiceRegisterConfiguration serviceRegisterConfiguration)
        {
            UraganoSettings.ServiceDiscoveryClientConfiguration = serviceDiscoveryClientConfiguration ?? throw new ArgumentNullException(nameof(serviceDiscoveryClientConfiguration));
            UraganoSettings.ServiceRegisterConfiguration        = serviceRegisterConfiguration ?? throw new ArgumentNullException(nameof(serviceRegisterConfiguration));
            if (string.IsNullOrWhiteSpace(serviceRegisterConfiguration.Name))
            {
                throw new ArgumentNullException(nameof(serviceRegisterConfiguration.Name));
            }

            ServiceCollection.AddSingleton(typeof(IServiceDiscovery), serviceDiscovery);
            AddStartUpTask <ServiceDiscoveryStartup>();
        }
Exemple #2
0
 public void AddServiceDiscovery(Type serviceDiscovery,
                                 IServiceDiscoveryClientConfiguration serviceDiscoveryClientConfiguration,
                                 IServiceRegisterConfiguration serviceRegisterConfiguration)
 {
     if (serviceDiscoveryClientConfiguration == null)
     {
         throw new ArgumentNullException(nameof(serviceDiscoveryClientConfiguration));
     }
     if (serviceRegisterConfiguration == null)
     {
         throw new ArgumentNullException(nameof(serviceRegisterConfiguration));
     }
     ServiceCollection.AddSingleton(serviceDiscoveryClientConfiguration);
     ServiceCollection.AddSingleton(serviceRegisterConfiguration);
     ServiceCollection.AddSingleton(typeof(IServiceDiscovery), serviceDiscovery);
     AddHostedService <ServiceDiscoveryStartup>();
 }
Exemple #3
0
 /// <summary>
 /// For server
 /// </summary>
 /// <typeparam name="TServiceDiscovery"></typeparam>
 /// <param name="serviceDiscoveryClientConfiguration"></param>
 /// <param name="serviceRegisterConfiguration"></param>
 public void AddServiceDiscovery <TServiceDiscovery>(IServiceDiscoveryClientConfiguration serviceDiscoveryClientConfiguration,
                                                     IServiceRegisterConfiguration serviceRegisterConfiguration) where TServiceDiscovery : IServiceDiscovery
 {
     AddServiceDiscovery(typeof(TServiceDiscovery), serviceDiscoveryClientConfiguration, serviceRegisterConfiguration);
 }
Exemple #4
0
        public async Task <bool> RegisterAsync(IServiceDiscoveryClientConfiguration serviceDiscoveryClientConfiguration, IServiceRegisterConfiguration serviceRegisterConfiguration, int?weight = default, CancellationToken cancellationToken = default)
        {
            if (!(serviceDiscoveryClientConfiguration is ConsulClientConfigure client))
            {
                return(false);
            }
            if (!(serviceRegisterConfiguration is ConsulRegisterServiceConfiguration service))
            {
                throw new ArgumentNullException(nameof(UraganoSettings.ServiceRegisterConfiguration));
            }
            Logger.LogTrace("Start registration consul...");
            using (var consul = new ConsulClient(conf =>
            {
                conf.Address = client.Address;
                conf.Datacenter = client.Datacenter;
                conf.Token = client.Token;
                conf.WaitTime = client.WaitTime;
            }))
            {
                if (weight.HasValue)
                {
                    if (service.Meta == null)
                    {
                        service.Meta = new Dictionary <string, string>();
                    }
                    service.Meta.Add("X-Weight", weight.ToString());
                }

                //Register service to consul agent
                var result = await consul.Agent.ServiceRegister(new AgentServiceRegistration
                {
                    Address           = UraganoSettings.ServerSettings.IP.ToString(),
                    Port              = UraganoSettings.ServerSettings.Port,
                    ID                = service.Id,
                    Name              = string.IsNullOrWhiteSpace(service.Name) ? $"{UraganoSettings.ServerSettings.IP}:{UraganoSettings.ServerSettings.Port}" : service.Name,
                    EnableTagOverride = service.EnableTagOverride,
                    Meta              = service.Meta,
                    Tags              = service.Tags,
                    Check             = new AgentServiceCheck
                    {
                        TCP = $"{UraganoSettings.ServerSettings.IP}:{UraganoSettings.ServerSettings.Port}",
                        DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20),
                        Timeout  = TimeSpan.FromSeconds(3),
                        Interval = service.HealthCheckInterval
                    }
                }, cancellationToken);

                if (result.StatusCode != HttpStatusCode.OK)
                {
                    Logger.LogError("--------------->  Registration service failed:{0}", result.StatusCode);
                    throw new ConsulRequestException("Registration service failed.", result.StatusCode);
                }
                Logger.LogTrace("---------------> Consul service registration completed");
                return(result.StatusCode != HttpStatusCode.OK);
            }
        }