Ejemplo n.º 1
0
 public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, IAddressSelector addressSelector, IHealthCheckService healthCheckService)
 {
     _serviceRouteManager = serviceRouteManager;
     _logger             = logger;
     _addressSelector    = addressSelector;
     _healthCheckService = healthCheckService;
 }
Ejemplo n.º 2
0
 public DefaultAddressResolver(IServiceRouteManager manager, IAddressSelector selector, IHealthCheckService healthCheckService, ILogger <DefaultAddressResolver> logger)
 {
     _manager             = manager;
     _selector            = selector;
     _healthChecksService = healthCheckService;
     _logger = logger;
 }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        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));
            };
        }
Ejemplo n.º 5
0
        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);
            };
        }
Ejemplo n.º 6
0
 public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger<DefaultAddressResolver> logger, IAddressSelector addressSelector, IHealthCheckService healthCheckService)
 {
     _serviceRouteManager = serviceRouteManager;
     _logger = logger;
     _addressSelector = addressSelector;
     _healthCheckService = healthCheckService;
 }
Ejemplo n.º 7
0
        /// <summary>
        /// get routes as an asynchronous operation.
        /// </summary>
        /// <param name="serviceRouteManager">The service route manager.</param>
        /// <param name="address">The address.</param>
        /// <returns>Task&lt;IEnumerable&lt;ServiceRoute&gt;&gt;.</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)));
        }
Ejemplo n.º 8
0
 public PollingAddressSelector(IServiceRouteManager serviceRouteManager, IHealthCheckService healthCheckService)
 {
     _healthCheckService = healthCheckService;
     //路由发生变更时重建地址条目。
     serviceRouteManager.Changed += ServiceRouteManager_Removed;
     serviceRouteManager.Removed += ServiceRouteManager_Removed;
 }
Ejemplo n.º 9
0
 public PollingAddressSelector(IServiceRouteManager serviceRouteManager, IHealthCheckService healthCheckService)
 {
     _healthCheckService = healthCheckService;
     //路由发生变更时重建地址条目。
     serviceRouteManager.Changed += ServiceRouteManager_Removed;
     serviceRouteManager.Removed += ServiceRouteManager_Removed;
 }
Ejemplo n.º 10
0
        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));
            };
        }
Ejemplo n.º 11
0
 public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, CPlatformContainer container, IHealthCheckService healthCheckService)
 {
     _container           = container;
     _serviceRouteManager = serviceRouteManager;
     _logger             = logger;
     _addressSelector    = container.GetInstances <IAddressSelector>();
     _healthCheckService = healthCheckService;
 }
Ejemplo n.º 12
0
        /// <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;
 }
Ejemplo n.º 14
0
 public HashAlgorithmAdrSelector(IServiceRouteManager serviceRouteManager, IHealthCheckService healthCheckService, IHashAlgorithm hashAlgorithm)
 {
     _healthCheckService = healthCheckService;
     _hashAlgorithm      = hashAlgorithm;
     //路由发生变更时重建地址条目。
     serviceRouteManager.Changed += ServiceRouteManager_Removed;
     serviceRouteManager.Removed += ServiceRouteManager_Removed;
 }
Ejemplo n.º 15
0
 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;
 }
Ejemplo n.º 16
0
 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;
 }
Ejemplo n.º 18
0
 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;
 }
Ejemplo n.º 19
0
 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;
 }
Ejemplo n.º 20
0
 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;
 }
Ejemplo n.º 21
0
        /// <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&lt;IEnumerable&lt;ServiceDescriptor&gt;&gt;.</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));
        }
Ejemplo n.º 22
0
 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;
 }
Ejemplo n.º 23
0
        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);
        }
Ejemplo n.º 24
0
        /// <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;
 }
Ejemplo n.º 26
0
        /// <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);
 }
Ejemplo n.º 29
0
 public DefaultAddressResolver(IServiceRouteManager serviceRouteManager, ILogger <DefaultAddressResolver> logger, IAddressSelector addressSelector)
 {
     _serviceRouteManager = serviceRouteManager;
     _logger          = logger;
     _addressSelector = addressSelector;
 }
Ejemplo n.º 30
0
 public HashAlgorithmAdrSelector(IServiceRouteManager serviceRouteManager, IHealthCheckService healthCheckService)
 {
     _healthCheckService = healthCheckService;
     //路由发生变更时重建地址条目。
 }
Ejemplo n.º 31
0
 /// <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));
 }
Ejemplo n.º 32
0
 public DefaultAddressResolver(IServiceRouteManager serviceRoutingService)
 {
     _serviceRoutingService = serviceRoutingService;
 }
Ejemplo n.º 33
0
 public PollingAddressSelector(IServiceRouteManager serviceRouteManager)
 {
     //路由发生变更时重建地址条目。
     serviceRouteManager.Changed += ServiceRouteManager_Removed;
     serviceRouteManager.Removed += ServiceRouteManager_Removed;
 }
Ejemplo n.º 34
0
 public PollingAddressSelector(IServiceRouteManager serviceRouteManager)
 {
     //路由发生变更时重建地址条目。
     serviceRouteManager.Changed += ServiceRouteManager_Removed;
     serviceRouteManager.Removed += ServiceRouteManager_Removed;
 }
Ejemplo n.º 35
0
 /// <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);
 }