internal static InstanceInfo FromInstanceConfig(IEurekaInstanceConfig instanceConfig) { InstanceInfo info = new InstanceInfo { LeaseInfo = LeaseInfo.FromConfig(instanceConfig), InstanceId = instanceConfig.InstanceId }; if (string.IsNullOrEmpty(info.InstanceId)) { info.InstanceId = instanceConfig.GetHostName(false); } string defaultAddress = instanceConfig.GetHostName(false); if (instanceConfig.PreferIpAddress || string.IsNullOrEmpty(defaultAddress)) { defaultAddress = instanceConfig.IpAddress; } info.AppName = instanceConfig.AppName.ToUpperInvariant(); info.AppGroupName = instanceConfig.AppGroupName?.ToUpperInvariant(); info.DataCenterInfo = instanceConfig.DataCenterInfo; info.IpAddr = instanceConfig.IpAddress; info.HostName = defaultAddress; info.Port = (instanceConfig.NonSecurePort == -1) ? EurekaInstanceConfig.Default_NonSecurePort : instanceConfig.NonSecurePort; info.IsUnsecurePortEnabled = instanceConfig.IsNonSecurePortEnabled; info.SecurePort = (instanceConfig.SecurePort == -1) ? EurekaInstanceConfig.Default_SecurePort : instanceConfig.SecurePort; info.IsSecurePortEnabled = instanceConfig.SecurePortEnabled; info.VipAddress = instanceConfig.VirtualHostName; info.SecureVipAddress = instanceConfig.SecureVirtualHostName; info.HomePageUrl = MakeUrl(info, instanceConfig.HomePageUrlPath, instanceConfig.HomePageUrl); info.StatusPageUrl = MakeUrl(info, instanceConfig.StatusPageUrlPath, instanceConfig.StatusPageUrl); info.AsgName = instanceConfig.ASGName; info.HealthCheckUrl = MakeUrl(info, instanceConfig.HealthCheckUrlPath, instanceConfig.HealthCheckUrl, instanceConfig.SecureHealthCheckUrl); if (!instanceConfig.IsInstanceEnabledOnInit) { info._status = InstanceStatus.STARTING; } if (!string.IsNullOrEmpty(info.InstanceId)) { InstanceInfo me = ApplicationInfoManager.Instance.InstanceInfo; if (me != null) { if (info.InstanceId.Equals(me.InstanceId)) { info.IsCoordinatingDiscoveryServer = true; } } } if (instanceConfig.MetadataMap != null && instanceConfig.MetadataMap.Count > 0) { info._metaData = new Dictionary <string, string>(instanceConfig.MetadataMap); } return(info); }
internal HealthStatus AddHeartbeatStatus(IEurekaClientConfig clientConfig, IEurekaInstanceConfig instanceConfig, HealthCheckResult result, long lastGoodHeartbeatTimeTicks) { if (clientConfig != null && clientConfig.ShouldRegisterWithEureka) { var lastGoodHeartbeatPeriod = GetLastGoodHeartbeatTimePeriod(lastGoodHeartbeatTimeTicks); if (lastGoodHeartbeatPeriod <= 0) { result.Details.Add("heartbeat", "Not yet successfully connected"); result.Details.Add("heartbeatStatus", HealthStatus.UNKNOWN.ToString()); result.Details.Add("heartbeatTime", "UNKNOWN"); return(HealthStatus.UNKNOWN); } else if (lastGoodHeartbeatPeriod > ((instanceConfig.LeaseRenewalIntervalInSeconds * TimeSpan.TicksPerSecond) * 2)) { result.Details.Add("heartbeat", "Reporting failures connecting"); result.Details.Add("heartbeatStatus", HealthStatus.DOWN.ToString()); result.Details.Add("heartbeatTime", new DateTime(lastGoodHeartbeatTimeTicks).ToString("s")); result.Details.Add("heartbeatFailures", lastGoodHeartbeatPeriod / (instanceConfig.LeaseRenewalIntervalInSeconds * TimeSpan.TicksPerSecond)); return(HealthStatus.DOWN); } result.Details.Add("heartbeat", "Successful"); result.Details.Add("heartbeatStatus", HealthStatus.UP.ToString()); result.Details.Add("heartbeatTime", new DateTime(lastGoodHeartbeatTimeTicks).ToString("s")); return(HealthStatus.UP); } result.Details.Add("heartbeatStatus", "Not registering"); return(HealthStatus.UNKNOWN); }
public void SetAppUp(IEurekaInstanceConfig instanceConfig, EurekaClientConfig config, ILoggerFactory factory) { this._logger.LogDebug("Start registering service instance..."); ApplicationInfoManager aim = this.InitializeApplicationInfoManager(instanceConfig); this.SetAppStatus(InstanceStatus.UP, aim); this._logger.LogDebug($"Service instance was registered (ip: {instanceConfig.IpAddress}, port: {instanceConfig.NonSecurePort}, sec-port: {instanceConfig.SecurePort})"); this._eurekaClient = this.InitializeEurekaClient(instanceConfig, config, factory); for (int i = 0; i < 120; i++) { try { IList <InstanceInfo> infoList = this._eurekaClient.GetInstanceById(instanceConfig.InstanceId); if (infoList != null && infoList.Count > 0) { this._logger.LogDebug("Service instance was online."); return; } Thread.Sleep(1000); } catch (Exception) { Thread.Sleep(1000); } } throw new ThriftyException($"Unable to connect to the eureka server (eureka server: {config.EurekaServerServiceUrls}), please check the swifty server configuration"); }
protected internal virtual void ConfigureInstanceIfNeeded(IEurekaInstanceConfig instConfig) { if (string.IsNullOrEmpty(instConfig.AppName)) { instConfig.AppName = "unknown"; } if (string.IsNullOrEmpty(instConfig.InstanceId)) { var hostName = instConfig.GetHostName(false); var appName = instConfig.AppName; var index = (instConfig.NonSecurePort == -1) ? EurekaInstanceOptions.Default_NonSecurePort.ToString() : instConfig.NonSecurePort.ToString(); instConfig.InstanceId = hostName + ":" + appName + ":" + index; } if (string.IsNullOrEmpty(instConfig.VirtualHostName)) { instConfig.VirtualHostName = instConfig.AppName; } if (string.IsNullOrEmpty(instConfig.SecureVirtualHostName)) { instConfig.SecureVirtualHostName = instConfig.AppName; } }
protected EurekaDiscoveryClientBase(EurekaClientOptions clientOptions, EurekaInstanceOptions instOptions, IEurekaHttpClient httpClient, IApplicationLifetime lifeCycle = null, ILoggerFactory logFactory = null) { if (clientOptions == null) { throw new ArgumentNullException(nameof(clientOptions)); } ClientConfig = clientOptions; InstConfig = instOptions; if (InstConfig == null) { DiscoveryManager.Instance.Initialize(ClientConfig, httpClient, logFactory); } else { ConfigureInstanceIfNeeded(InstConfig); DiscoveryManager.Instance.Initialize(ClientConfig, InstConfig, httpClient, logFactory); } if (lifeCycle != null) { lifeCycle.ApplicationStopping.Register(() => { ShutdownAsync(); }); } Client = DiscoveryManager.Instance.Client; }
/// <summary> /// 获取或初始化实例配置,不存在则使用默认方式初始化一个 /// </summary> /// <returns></returns> private IEurekaInstanceConfig GetEurekaInstanceConfig() { if (_instanceConfig == null) { _instanceConfig = new EurekaRegisterInfo(); _instanceConfig.IpAddress = "127.0.0.1"; //为空获取网卡报错? if (String.IsNullOrWhiteSpace(_serverConfig.BindingAddress) || _serverConfig.BindingAddress == "0.0.0.0") { ThrowIfAddressWrong(); if (IsIPAddress(_instanceDescription.PublicAddress)) { _instanceConfig.IpAddress = _instanceDescription.PublicAddress; } else if (!String.IsNullOrWhiteSpace(_instanceDescription.PublicAddress)) { _instanceConfig.HostName = _instanceDescription.PublicAddress; } } else { _instanceConfig.IpAddress = _serverConfig.BindingAddress; } _instanceConfig.SecurePortEnabled = false; _instanceConfig.NonSecurePort = _serverConfig.Port; _instanceConfig.AppName = _instanceDescription.AppName; _instanceConfig.VirtualHostName = _instanceDescription.VipAddress; } return(_instanceConfig); }
public void Initialize(IEurekaInstanceConfig instanceConfig, ILoggerFactory logFactory = null) { if (instanceConfig == null) { throw new ArgumentNullException(nameof(instanceConfig)); } _logger = logFactory?.CreateLogger <ApplicationInfoManager>(); InstanceConfig = instanceConfig; InstanceInfo = InstanceInfo.FromInstanceConfig(instanceConfig); }
internal static LeaseInfo FromConfig(IEurekaInstanceConfig config) { var info = new LeaseInfo() { RenewalIntervalInSecs = config.LeaseRenewalIntervalInSeconds, DurationInSecs = config.LeaseExpirationDurationInSeconds }; return(info); }
public virtual void Initialize(IEurekaClientConfig clientConfig, IEurekaInstanceConfig instanceConfig, IEurekaHttpClient httpClient, ILoggerFactory logFactory = null) { _logger = logFactory?.CreateLogger <DiscoveryManager>(); ClientConfig = clientConfig ?? throw new ArgumentNullException(nameof(clientConfig)); InstanceConfig = instanceConfig ?? throw new ArgumentNullException(nameof(instanceConfig)); if (ApplicationInfoManager.Instance.InstanceInfo == null) { ApplicationInfoManager.Instance.Initialize(instanceConfig, logFactory); } Client = new DiscoveryClient(clientConfig, httpClient, logFactory); }
/// <summary> /// 初始化应用信息管理器 /// </summary> /// <param name="instanceConfig">实例配置</param> /// <returns>应用信息管理器</returns> ApplicationInfoManager InitializeApplicationInfoManager(IEurekaInstanceConfig instanceConfig) { if (this._applicationInfoManager == null) { lock (this) { if (ApplicationInfoManager.Instance.InstanceInfo == null) { ApplicationInfoManager.Instance.Initialize(instanceConfig); } this._applicationInfoManager = ApplicationInfoManager.Instance; } } return(this._applicationInfoManager); }
/// <summary> /// 初始化Eureka客户端 /// </summary> /// <param name="instanceConfig">实例配置</param> /// <param name="config">服务发现注册客户端配置</param> /// <param name="loggerFactory">loggerfactory</param> /// <returns>服务发现注册eureka客户端</returns> IEurekaClient InitializeEurekaClient(IEurekaInstanceConfig instanceConfig, EurekaClientConfig config, ILoggerFactory loggerFactory = null) { this._loggerFactory = loggerFactory; if (this._eurekaClient == null) { lock (this) { if (DiscoveryManager.Instance.Client == null) { DiscoveryManager.Instance.Initialize(config, instanceConfig, loggerFactory); } this._eurekaClient = DiscoveryManager.Instance.Client; } } this._logger = loggerFactory?.CreateLogger <ThriftyRegistryService>() ?? (ILogger)NullLogger.Instance; return(this._eurekaClient); }
public virtual void Initialize(IEurekaClientConfig clientConfig, IEurekaInstanceConfig instanceConfig, ILoggerFactory logFactory = null) { Initialize(clientConfig, instanceConfig, null, logFactory); }
public virtual void Initialize(IEurekaInstanceConfig instanceConfig) { InstanceConfig = instanceConfig ?? throw new ArgumentNullException(nameof(instanceConfig)); InstanceInfo = InstanceInfo.FromInstanceConfig(instanceConfig); }
public EurekaClient(IEurekaHttpClient httpClient, IEurekaInstanceConfig instanceConfig) { _httpClient = httpClient; _instanceConfig = instanceConfig; }