public ThrottleServiceSubscriber(IServiceSubscriber serviceSubscriber, int maxActions, TimeSpan maxPeriod) { _serviceSubscriber = serviceSubscriber; _throttleActions = new SemaphoreSlim(maxActions, maxActions); _throttlePeriods = new SemaphoreSlim(maxActions, maxActions); _maxPeriod = maxPeriod; }
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); }
/// <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); }
/// <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); }
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); }
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; } }
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); } }
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)); }
/// <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; }
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); }
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; }
/// <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)); }