public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, IAddressSelector addressSelector, IHealthCheckService healthCheckService) { _serviceRouteManager = serviceRouteManager; _logger = logger; _addressSelector = addressSelector; _healthCheckService = healthCheckService; }
public DefaultAddressResolver(IServiceRouteManager manager, IAddressSelector selector, IHealthCheckService healthCheckService, ILogger <DefaultAddressResolver> logger) { _manager = manager; _selector = selector; _healthChecksService = healthCheckService; _logger = logger; }
/// <summary> /// 获取地址 /// </summary> /// <returns></returns> public static async Task <IEnumerable <AddressModel> > GetAddressAsync(this IServiceRouteManager serviceRouteManager, string condition = null) { var routes = await serviceRouteManager.GetRoutesAsync(); Dictionary <string, AddressModel> result = new Dictionary <string, AddressModel>(); if (condition != null) { if (!condition.IsIP()) { routes = routes.Where(p => p.ServiceDescriptor.Id == condition); } else { routes = routes.Where(p => p.Address.Any(m => m.ToString() == condition)); var addresses = routes.FirstOrDefault().Address; return(addresses.Where(p => p.ToString() == condition)); } } foreach (var route in routes) { var addresses = route.Address; foreach (var address in addresses) { if (!result.ContainsKey(address.ToString())) { result.Add(address.ToString(), address); } } } return(result.Values); }
public DefaultHealthCheckService(IServiceRouteManager serviceRouteManager) { var timeSpan = TimeSpan.FromSeconds(10); _timer = new Timer(s => { Check(_dictionary.ToArray().Select(i => i.Value)); }, null, timeSpan, timeSpan); //去除监控。 //serviceRouteManager.Removed += (s, e) => //{ // Remove(e.Route.Address); //}; //重新监控。 serviceRouteManager.Created += (s, e) => { //var keys = e.Route.Address.Select(i => i.ToString()); //Check(_dictionary.Where(i => keys.Contains(i.Key)).Select(i => i.Value)); }; //重新监控。 serviceRouteManager.Changed += (s, e) => { //var keys = e.Route.Address.Select(i => i.ToString()); //Check(_dictionary.Where(i => keys.Contains(i.Key)).Select(i => i.Value)); }; }
public DefaultHealthCheckService(IServiceRouteManager serviceRouteManager) { var timeSpan = TimeSpan.FromSeconds(10); _serviceRouteManager = serviceRouteManager; _timer = new Timer(s => { Check(_dictionary.ToArray().Select(i => i.Value), _timeout); RemoveUnhealthyAddress(_dictionary.ToArray().Select(i => i.Value).Where(m => m.UnhealthyTimes >= 6)); }, null, timeSpan, timeSpan); //去除监控。 serviceRouteManager.Removed += (s, e) => { Remove(e.Route.Address); }; //重新监控。 serviceRouteManager.Created += (s, e) => { var keys = e.Route.Address.Select(i => i.ToString()); Check(_dictionary.Where(i => keys.Contains(i.Key)).Select(i => i.Value), _timeout); }; //重新监控。 serviceRouteManager.Changed += (s, e) => { var keys = e.Route.Address.Select(i => i.ToString()); Check(_dictionary.Where(i => keys.Contains(i.Key)).Select(i => i.Value), _timeout); }; }
public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger<DefaultAddressResolver> logger, IAddressSelector addressSelector, IHealthCheckService healthCheckService) { _serviceRouteManager = serviceRouteManager; _logger = logger; _addressSelector = addressSelector; _healthCheckService = healthCheckService; }
/// <summary> /// get routes as an asynchronous operation. /// </summary> /// <param name="serviceRouteManager">The service route manager.</param> /// <param name="address">The address.</param> /// <returns>Task<IEnumerable<ServiceRoute>>.</returns> public static async Task <IEnumerable <ServiceRoute> > GetRoutesAsync( this IServiceRouteManager serviceRouteManager, string address) { var routes = await serviceRouteManager.GetRoutesAsync(); return(routes.Where(p => p.Address.Any(m => m.ToString() == address))); }
public PollingAddressSelector(IServiceRouteManager serviceRouteManager, IHealthCheckService healthCheckService) { _healthCheckService = healthCheckService; //路由发生变更时重建地址条目。 serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; }
public PollingAddressSelector(IServiceRouteManager serviceRouteManager, IHealthCheckService healthCheckService) { _healthCheckService = healthCheckService; //路由发生变更时重建地址条目。 serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; }
public DefaultHealthCheckService(IServiceRouteManager serviceRouteManager) { var timeSpan = TimeSpan.FromSeconds(10); _timer = new Timer(s => { Check(_dictionary.ToArray().Select(i => i.Value)); }, null, timeSpan, timeSpan); //去除监控。 serviceRouteManager.Removed += (s, e) => { Remove(e.Route.Address); }; //重新监控。 serviceRouteManager.Created += (s, e) => { var keys = e.Route.Address.Select(i => i.ToString()); Check(_dictionary.Where(i => keys.Contains(i.Key)).Select(i => i.Value)); }; //重新监控。 serviceRouteManager.Changed += (s, e) => { var keys = e.Route.Address.Select(i => i.ToString()); Check(_dictionary.Where(i => keys.Contains(i.Key)).Select(i => i.Value)); }; }
public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, CPlatformContainer container, IHealthCheckService healthCheckService) { _container = container; _serviceRouteManager = serviceRouteManager; _logger = logger; _addressSelector = container.GetInstances <IAddressSelector>(); _healthCheckService = healthCheckService; }
/// <summary> /// 获取令牌 /// </summary> /// <returns></returns> public static async Task <string> GetTokensAsync(this IServiceRouteManager serviceRouteManager, string ipAddress) { var routes = await serviceRouteManager.GetAddressAsync(ipAddress); var address = routes.FirstOrDefault(); return(address?.Token); }
public DefaultServiceRouteProvider(IServiceRouteManager serviceRouteManager, ILogger<DefaultServiceRouteProvider> logger) { _serviceRouteManager = serviceRouteManager; serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; serviceRouteManager.Created += ServiceRouteManager_Add; _logger = logger; }
public HashAlgorithmAdrSelector(IServiceRouteManager serviceRouteManager, IHealthCheckService healthCheckService, IHashAlgorithm hashAlgorithm) { _healthCheckService = healthCheckService; _hashAlgorithm = hashAlgorithm; //路由发生变更时重建地址条目。 serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; }
public DefaultAddressResolver(RegistryService registryService, IRegisterMetaDiscoveryProvider serviceProvider, IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, IAddressSelector addressSelector, IHealthCheckService healthCheckService) { _registryService = registryService; _serviceProvider = serviceProvider; _serviceRouteManager = serviceRouteManager; _logger = logger; _addressSelector = addressSelector; _healthCheckService = healthCheckService; }
public RedisAddressResolver(ILogger <RedisAddressResolver> logger, IServiceRouteManager serviceRouteManager, IContainer container) { _logger = logger; _serviceRouteManager = serviceRouteManager; _container = container; _serviceRouteManager.Changed += ServiceRouteManager_Removed; _serviceRouteManager.Removed += ServiceRouteManager_Removed; _serviceRouteManager.Created += ServiceRouteManager_Add; }
public DefaultServiceRouteProvider(IServiceRouteManager serviceRouteManager, IServiceEntryManager serviceEntryManager, IServiceTokenGenerator serviceTokenGenerator) { serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; serviceRouteManager.Created += ServiceRouteManager_Add; _serviceEntryManager = serviceEntryManager; _serviceTokenGenerator = serviceTokenGenerator; _serviceRouteManager = serviceRouteManager; }
public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, CPlatformContainer container, IHealthCheckService healthCheckService) { _container = container; _serviceRouteManager = serviceRouteManager; _logger = logger; _addressSelector = container.GetInstances <IAddressSelector>(AppConfig.LoadBalanceMode.ToString()); _healthCheckService = healthCheckService; serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; serviceRouteManager.Created += ServiceRouteManager_Add; }
public DefaultAddressResolver(IServiceCommandProvider commandProvider, IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, CPlatformContainer container, IHealthCheckService healthCheckService) { _container = container; _serviceRouteManager = serviceRouteManager; _logger = logger; LoadAddressSelectors(); _commandProvider = commandProvider; _healthCheckService = healthCheckService; serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; serviceRouteManager.Created += ServiceRouteManager_Add; }
public ZookeeperServiceCommandManager(ConfigInfo configInfo, ISerializer <byte[]> serializer, ISerializer <string> stringSerializer, IServiceRouteManager serviceRouteManager, IServiceEntryManager serviceEntryManager, ILogger <ZookeeperServiceCommandManager> logger, IZookeeperClientProvider zookeeperClientProvider) : base(stringSerializer, serviceEntryManager) { _configInfo = configInfo; _serializer = serializer; _serviceRouteManager = serviceRouteManager; _logger = logger; _zookeeperClientProvider = zookeeperClientProvider; EnterServiceCommands().Wait(); _serviceRouteManager.Removed += ServiceRouteManager_Removed; }
/// <summary> /// get service descriptor as an asynchronous operation. /// </summary> /// <param name="serviceRouteManager">The service route manager.</param> /// <param name="address">The address.</param> /// <param name="serviceId">The service identifier.</param> /// <returns>Task<IEnumerable<ServiceDescriptor>>.</returns> public static async Task <IEnumerable <ServiceDescriptor> > GetServiceDescriptorAsync( this IServiceRouteManager serviceRouteManager, string address, string serviceId = null) { var routes = await serviceRouteManager.GetRoutesAsync(); if (serviceId == null) { return(routes.Where(p => p.Address.Any(m => m.ToString() == address)) .Select(p => p.ServiceDescriptor)); } return(routes.Where(p => p.ServiceDescriptor.Id == serviceId) .Select(p => p.ServiceDescriptor)); }
public ConsulServiceCommandManager(ConfigInfo configInfo, ISerializer <byte[]> serializer, ISerializer <string> stringSerializer, IServiceRouteManager serviceRouteManager, IClientWatchManager manager, IServiceEntryManager serviceEntryManager, ILogger <ConsulServiceCommandManager> logger, IServiceHeartbeatManager serviceHeartbeatManager, IConsulClientProvider consulClientFactory) : base(stringSerializer, serviceEntryManager) { _configInfo = configInfo; _serializer = serializer; _logger = logger; _consulClientFactory = consulClientFactory; _stringSerializer = stringSerializer; _manager = manager; _serviceRouteManager = serviceRouteManager; _serviceHeartbeatManager = serviceHeartbeatManager; EnterServiceCommands().Wait(); _serviceRouteManager.Removed += ServiceRouteManager_Removed; }
public static async Task <ICollection <ServiceRoute> > GetLocalServiceRoutes(this IServiceRouteManager serviceRouteManager, IEnumerable <ServiceEntry> serviceEntries) { var serviceRoutes = await serviceRouteManager.GetRoutesAsync(); var localServiceRoutes = new List <ServiceRoute>(); foreach (var entry in serviceEntries) { var serviceRoute = serviceRoutes.FirstOrDefault(p => p.ServiceDescriptor.Id == entry.Descriptor.Id); if (serviceRoute != null) { localServiceRoutes.Add(serviceRoute); } } return(localServiceRoutes); }
/// <summary> /// Initializes a new instance of the <see cref="DefaultHealthCheckService" /> class. /// 默认心跳检查服务(每10秒会检查一次服务状态,在构造函数中添加服务管理事件) /// </summary> /// <param name="serviceRouteManager">The service route manager.</param> public DefaultHealthCheckService(IServiceRouteManager serviceRouteManager) { var timeSpan = TimeSpan.FromSeconds(10); _serviceRouteManager = serviceRouteManager; // 建立计时器 _timer = new Timer( async s => { // 检查服务是否可用 await Check(_dictionary.ToArray().Select(i => i.Value), _timeout); // 移除不可用的服务地址 RemoveUnhealthyAddress(_dictionary.ToArray().Select(i => i.Value) .Where(m => m.UnhealthyTimes >= 6)); }, null, timeSpan, timeSpan); // 去除监控。 serviceRouteManager.Removed += (s, e) => { Remove(e.Route.Address); }; // 重新监控。 serviceRouteManager.Created += async(s, e) => { var keys = e.Route.Address.Select(address => { var ipAddress = address as IpAddressModel; return(new ValueTuple <string, int>(ipAddress.Ip, ipAddress.Port)); }); await Check(_dictionary.Where(i => keys.Contains(i.Key)).Select(i => i.Value), _timeout); }; // 重新监控。 serviceRouteManager.Changed += async(s, e) => { var keys = e.Route.Address.Select(address => { var ipAddress = address as IpAddressModel; return(new ValueTuple <string, int>(ipAddress.Ip, ipAddress.Port)); }); await Check(_dictionary.Where(i => keys.Contains(i.Key)).Select(i => i.Value), _timeout); }; }
public ConsulServiceCommandManager(ConfigInfo configInfo, ISerializer <byte[]> serializer, ISerializer <string> stringSerializer, IServiceRouteManager serviceRouteManager, IClientWatchManager manager, IServiceEntryManager serviceEntryManager, ILogger <ConsulServiceCommandManager> logger) : base(stringSerializer, serviceEntryManager) { _configInfo = configInfo; _serializer = serializer; _logger = logger; _stringSerializer = stringSerializer; _manager = manager; _serviceRouteManager = serviceRouteManager; _consul = new ConsulClient(config => { config.Address = new Uri($"http://{configInfo.Host}:{configInfo.Port}"); }, null, h => { h.UseProxy = false; h.Proxy = null; }); EnterServiceCommands().Wait(); _serviceRouteManager.Removed += ServiceRouteManager_Removed; }
/// <summary> /// 获取地址 /// </summary> /// <returns></returns> public static async Task <IEnumerable <AddressModel> > GetAddressAsync(this IServiceRouteManager serviceRouteManager) { var routes = await serviceRouteManager.GetRoutesAsync(); Dictionary <string, AddressModel> result = new Dictionary <string, AddressModel>(); foreach (var route in routes) { var addresses = route.Address; foreach (var address in addresses) { if (!result.ContainsKey(address.ToString())) { result.Add(address.ToString(), address); } } } return(result.Values); }
/// <summary> /// 默认心跳检查服务(每10秒会检查一次服务状态,在构造函数中添加服务管理事件) /// </summary> /// <param name="serviceRouteManager"></param> public DefaultHealthCheckService(IServiceRouteManager serviceRouteManager) { _serviceRouteManager = serviceRouteManager; _logger = ServiceLocator.GetService <ILogger <DefaultHealthCheckService> >(); //去除监控。 _serviceRouteManager.Removed += (s, e) => { Remove(e.Route.Address); }; //重新监控。 _serviceRouteManager.Created += async(s, e) => { Remove(e.Route.Address); }; //重新监控。 _serviceRouteManager.Changed += async(s, e) => { Remove(e.Route.Address); }; IsListener = false; }
/// <summary> /// 设置服务路由管理者。 /// </summary> /// <param name="builder">服务构建者。</param> /// <param name="instance">服务路由管理者实例。</param> /// <returns>服务构建者。</returns> public static IServiceBuilder UseRouteManager(this IServiceBuilder builder, IServiceRouteManager instance) { builder.Services.RegisterInstance(instance); return(builder); }
public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, IAddressSelector addressSelector) { _serviceRouteManager = serviceRouteManager; _logger = logger; _addressSelector = addressSelector; }
public HashAlgorithmAdrSelector(IServiceRouteManager serviceRouteManager, IHealthCheckService healthCheckService) { _healthCheckService = healthCheckService; //路由发生变更时重建地址条目。 }
/// <summary> /// 根据服务Id获取一个服务路由。 /// </summary> /// <param name="serviceRouteManager">服务路由管理者。</param> /// <param name="serviceId">服务Id。</param> /// <returns>服务路由。</returns> public static async Task <ServiceRoute> GetAsync(this IServiceRouteManager serviceRouteManager, string serviceId) { return((await serviceRouteManager.GetRoutesAsync()).SingleOrDefault(i => i.ServiceDescriptor.Id == serviceId)); }
public DefaultAddressResolver(IServiceRouteManager serviceRoutingService) { _serviceRoutingService = serviceRoutingService; }
public PollingAddressSelector(IServiceRouteManager serviceRouteManager) { //路由发生变更时重建地址条目。 serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; }
public PollingAddressSelector(IServiceRouteManager serviceRouteManager) { //路由发生变更时重建地址条目。 serviceRouteManager.Changed += ServiceRouteManager_Removed; serviceRouteManager.Removed += ServiceRouteManager_Removed; }
/// <summary> /// 设置服务路由管理者。 /// </summary> /// <param name="builder">Rpc服务构建者。</param> /// <param name="instance">服务路由管理者实例。</param> /// <returns>Rpc服务构建者。</returns> public static IRpcBuilder UseRouteManager(this IRpcBuilder builder, IServiceRouteManager instance) { builder.Services.AddSingleton(instance); return(builder); }