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