public ThrottleServiceSubscriber(IServiceSubscriber serviceSubscriber, int maxActions, TimeSpan maxPeriod)
 {
     _serviceSubscriber = serviceSubscriber;
     _throttleActions   = new SemaphoreSlim(maxActions, maxActions);
     _throttlePeriods   = new SemaphoreSlim(maxActions, maxActions);
     _maxPeriod         = maxPeriod;
 }
Ejemplo n.º 2
0
        private void Reload(IServiceSubscriber subscriber, EventArgs args)
        {
            var services = Enumerable.Range(1, 50).Select(n =>
                                                          new Service(n, $"Test {n}", $"Description #{n}", Statuses.Running, $"Group {n}", $"Image path #{n}")
                                                          );

            subscriber.OnReload(services);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 服务订阅
        /// </summary>
        /// <param name="serviceSubscriber"></param>
        /// <param name="serviceProxyTypes">服务代理类型列表</param>
        /// <param name="useNewClient">是否强制使用新的NodeClient,当为false时会多个服务代理共享一个NodeClient实例</param>
        /// <returns></returns>
        public static IServiceSubscriber Subscribe(this IServiceSubscriber serviceSubscriber, IEnumerable <Type> serviceProxyTypes, bool useNewClient = false)
        {
            foreach (var serviceProxyType in serviceProxyTypes)
            {
                serviceSubscriber.Subscribe(serviceProxyType, useNewClient);
            }

            return(serviceSubscriber);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 向ServiceProxyManager注册所有订阅服务的代理对象
        /// </summary>
        /// <param name="serviceSubscriber"></param>
        /// <param name="serviceProxyManager">服务代理管理器</param>
        public static IServiceSubscriber RegistTo(this IServiceSubscriber serviceSubscriber, IServiceProxyManager serviceProxyManager)
        {
            var serviceProxies = serviceSubscriber.GetServiceProxies();

            foreach (var serviceProxy in serviceProxies)
            {
                serviceProxyManager.Regist(serviceProxy);
            }

            return(serviceSubscriber);
        }
Ejemplo n.º 5
0
        public void Build(IServiceSubscriber subscriber)
        {
            var subscribers = Subscribers;

            subscriber.ReloadRequested  += Reload;
            subscriber.StartRequested   += Start;
            subscriber.StopRequested    += Stop;
            subscriber.RestartRequested += Restart;
            subscriber.Disposed         += Dispose;

            subscribers.Add(subscriber);
        }
Ejemplo n.º 6
0
        private void Dispose(IServiceSubscriber subscriber, EventArgs args)
        {
            var subscribers = Subscribers;

            if (subscribers.Contains(subscriber))
            {
                subscriber.ReloadRequested  -= Reload;
                subscriber.StartRequested   -= Start;
                subscriber.StopRequested    -= Stop;
                subscriber.RestartRequested -= Restart;
                subscriber.Disposed         -= Dispose;
            }
        }
Ejemplo n.º 7
0
        void Unsubscribe(ServiceEventType eventType)
        {
            List <IServiceSubscriber> subscribers;

            if (!_subscribers.TryGetValue(eventType, out subscribers))
            {
                return;                 // Nothing to unsubscribe
            }
            IServiceSubscriber subscriber = OperationContext.Current.GetCallbackChannel <IServiceSubscriber>();

            if (subscribers.Contains(subscriber))
            {
                subscribers.Remove(subscriber);
            }
        }
Ejemplo n.º 8
0
        void Subscribe(ServiceEventType eventType)
        {
            List <IServiceSubscriber> subscribers;

            if (!_subscribers.TryGetValue(eventType, out subscribers))
            {
                subscribers = new List <IServiceSubscriber>();
                _subscribers.Add(eventType, subscribers);
            }

            IServiceSubscriber subscriber = OperationContext.Current.GetCallbackChannel <IServiceSubscriber>();

            if (!subscribers.Contains(subscriber))
            {
                subscribers.Add(subscriber);
            }
        }
 public IPollingServiceSubscriber CreateSubscriber(IServiceSubscriber serviceSubscriber)
 {
     return(new CacheServiceSubscriber(serviceSubscriber, _cacheClient));
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Set the Subscriber instane with injected instance.
 /// </summary>
 /// <param name="injectedServiceSubscriber">injected instance</param>
 public ServiceSubscriberClient(IServiceSubscriber injectedServiceSubscriber)
 {
     _serviceSubscriber = injectedServiceSubscriber;
 }
 public RandomLoadBalancer(IServiceSubscriber subscriber, int?seed = null)
 {
     _subscriber = subscriber;
     _random     = seed.HasValue ? new Random(seed.Value) : new Random();
 }
 public ThrottleServiceSubscriber(IServiceSubscriber serviceSubscriber, ThrottleSubscriberOptions throttleOptions)
     : this(serviceSubscriber, throttleOptions.MaxUpdatesPerPeriod, throttleOptions.MaxUpdatesPeriod)
 {
 }
 public RoundRobinLoadBalancer(IServiceSubscriber subscriber)
 {
     _subscriber = subscriber;
 }
Ejemplo n.º 14
0
        private static IServiceProxyManager InitWithZookeeper(string host, int port, string localHost, int?localPort)
        {
            string path = Path.Combine(Directory.GetCurrentDirectory(), "config_service_discovery_zookeeper.json");

            var configRoot = new ConfigurationBuilder()
                             .AddJsonFile(path)
                             .Build();

            var clientConfig = configRoot.GetClientConfig();

            LoggerManager.ClientLoggerFactory.AddConsole(LogLevel.Information);

            var serviceProxyTypeList = new List <Type>()
            {
                typeof(ICustomerService), typeof(OrderService)
            };

            var serializerList = new List <ISerializer>()
            {
                new MsgPackSerializer(LoggerManager.ClientLoggerFactory),
                new ProtoBufSerializer(LoggerManager.ClientLoggerFactory)
            };

            var serviceCaller = new ServiceCallerBuilder()
                                .UseDefault()
                                .Build();

            var serviceProxyManager = new ServiceProxyManager();

            var zookeeperConfig       = configRoot.GetZookeeperConfig();
            var zookeeperClientConfig = configRoot.GetZookeeperClientConfig();

            var builder = new ContainerBuilder();

            builder.Register(c => new ServiceProxyInterceptor(serviceProxyManager));
            builder.RegisterType <CustomerService>()
            .As <ICustomerService>()
            .EnableInterfaceInterceptors()          //接口拦截
            .InterceptedBy(typeof(ServiceProxyInterceptor))
            .SingleInstance();
            builder.RegisterType <OrderService>()
            //.As<IOrderService>()
            .EnableClassInterceptors()              //类拦截
            .InterceptedBy(typeof(ServiceProxyInterceptor))
            .SingleInstance();

            container = builder.Build();

            var serviceProxyFactory = ServiceProxyCreator.CreateDefaultServiceProxyFactory(serviceCaller);
            var nodeClientFactory   = NodeClientManager.CreateDefaultNodeClientFactory(zookeeperClientConfig, serializerList, LoggerManager.ClientLoggerFactory);

            serviceSubscriber = new ServiceSubscriber(zookeeperConfig,
                                                      LoggerManager.ClientLoggerFactory,
                                                      new ServiceProxyCreator(LoggerManager.ClientLoggerFactory, serviceProxyFactory, zookeeperClientConfig.Services),
                                                      new NodeClientManager(LoggerManager.ClientLoggerFactory, nodeClientFactory))
                                .Subscribe(container.GetNodeServiceProxyTypes())
                                .RegistTo(serviceProxyManager);

            serviceProxyManager.ConnectAsync().Wait();

            return(serviceProxyManager);
        }
Ejemplo n.º 15
0
        private void Restart(IServiceSubscriber subscriber, ServiceEventArgs args)
        {
            var service = args.Service;

            subscriber.OnUpdated(new Service(service.Pid, service.Name, service.Description, Statuses.Running, service.Group, service.ImagePath));
        }
 public CacheServiceSubscriber(IServiceSubscriber serviceSubscriber, ICacheClient cache)
 {
     _cache             = cache;
     _serviceSubscriber = serviceSubscriber;
 }
Ejemplo n.º 17
0
        /// <summary>
        /// 服务订阅
        /// </summary>
        /// <param name="serviceSubscriber"></param>
        /// <param name="useNewClient">是否强制使用新的NodeClient,当为false时会多个服务代理共享一个NodeClient实例</param>
        /// <returns></returns>
        public static IServiceSubscriber Subscribe <ServiceProxyType>(this IServiceSubscriber serviceSubscriber, bool useNewClient = false)
        {
            var serviceProxyType = typeof(ServiceProxyType);

            return(serviceSubscriber.Subscribe(serviceProxyType, useNewClient));
        }