Exemplo n.º 1
0
        public static IAppBuilder UseConsulRegistration(this IAppBuilder builder,
                                                        string serviceName,
                                                        string serviceCategory,
                                                        string localAddress,
                                                        int port)
        {
            // 服务注册
            var localImpls      = builder.ServiceProvider.GetServices <IServiceActor <AmpMessage> >();
            var serviceRegistor = builder.ServiceProvider.GetRequiredService <IServiceRegistrationProvider>();

            foreach (var actors in localImpls)
            {
                string      hashId = CryptographyManager.Md5Encrypt(localAddress + port);
                ServiceMeta meta   = new ServiceMeta
                {
                    Id          = hashId + "$" + actors.Id.Split('$')[0], //还要根据IP和端口添加一个MD5
                    ServiceName = serviceName,
                    IPAddress   = localAddress,
                    Port        = port,
                    Tags        = new string[] { serviceCategory }
                };

                serviceRegistor.RegisterAsync(meta).Wait();
            }
            return(builder);
        }
Exemplo n.º 2
0
        protected override void doSubscribe(ServiceMeta serviceMeta)
        {
            string           directory     = $"/meou/provider/{serviceMeta.getGroup()}/{serviceMeta.getName()}/{serviceMeta.getVersion()}";
            IZKChildListener childListener = new ZKChildListener();

            childListener.ChildChangeHandler = (parentPath, currentChilds) =>
            {
                var          list = new List <RegisterMeta>(currentChilds.Count);
                RegisterMeta temp = null;
                foreach (var child in currentChilds)
                {
                    temp = parseRegisterMeta($"{parentPath}/{child}");
                    list.Add(temp);
                }

                notify(serviceMeta, list);

                return(Task.CompletedTask);
            };

            //childListener.ChildCountChangedHandler = async (parentPath, currentChilds) =>
            //{
            //    await notify(serviceMeta, NotifyEvent.CHILD_ADDED, 1L, new List<RegisterMeta>());
            //};
            configClient.SubscribeChildChanges(directory, childListener);
        }
Exemplo n.º 3
0
 public void SetStatusContent(string content, int status, byte[] rawBytes)
 {
     this.StatusCode = status;
     this.Content    = content;
     if (status < 300)
     {
         this.Data = JsonConvert.DeserializeObject <ServiceMeta>(this.Content);
     }
 }
Exemplo n.º 4
0
        public ServiceMeta GetServiceMeta()
        {
            var svc         = new ServiceMeta();
            var controllers = svc.Controllers = new List <ControllerMeta>();

            foreach (var type in this.ControllerTypes)
            {
                controllers.Add(GetControllerMeta(type));
            }
            return(svc);
        }
Exemplo n.º 5
0
        /// <a href="http://bit.ly/2OZP7gP">Add an entry point manually instead of using inspector. Used in testing</a>
        public void AddEntryPoint(string entryPointName, string request, string response)
        {
            var meta = new ServiceMeta[entryPoints.Length + 1];

            entryPoints.CopyTo(meta, 0);
            meta[entryPoints.Length] = new ServiceMeta
            {
                entryPointName = entryPointName, requestData = request, responseData = response
            };
            entryPoints = meta;
        }
Exemplo n.º 6
0
        public virtual Collection <RegisterMeta> lookup(ServiceMeta serviceMeta)
        {
            KeyValuePair <long, List <RegisterMeta> > data;

            registries.TryGetValue(serviceMeta, out data);

            if (data.Key != 0)
            {
                return(new Collection <RegisterMeta>(data.Value));
            }
            return(new Collection <RegisterMeta>());
        }
Exemplo n.º 7
0
        public async Task <List <ServiceMeta> > FindServicesAsync(string serviceCategory)
        {
            List <ServiceMeta> list = new List <ServiceMeta>();

            if (_lastIndex > 0)
            {
                _queryOptions.WaitIndex = _lastIndex + 1;
            }
            var reslut = await this._client.Health.Service(_serviceName, serviceCategory, true, _queryOptions);

            if (reslut.StatusCode == System.Net.HttpStatusCode.OK)
            {
                if (reslut.LastIndex > this._lastIndex)
                {
                    _lastIndex = reslut.LastIndex;
                    if (reslut.Response != null && reslut.Response.Length > 0)
                    {
                        foreach (ServiceEntry entry in reslut.Response)
                        {
                            string[] splitId = entry.Service.ID.Split('$');
                            if (splitId.Length != 2)
                            {
                                continue;
                            }
                            string serviceId = splitId[1];
                            if (!this._requireServices.Contains(serviceId))
                            {
                                continue;
                            }
                            ServiceMeta meta = new ServiceMeta
                            {
                                Id          = entry.Service.ID,
                                ServiceName = splitId[0],
                                IPAddress   = entry.Service.Address,
                                Port        = entry.Service.Port
                            };
                            list.Add(meta);
                        }
                    }
                }
            }
            else if
            (reslut.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                //找不到的话 就不做处理了
            }
            else
            {
                throw new Exception($"call find services error,return code {reslut.StatusCode}");
            }
            return(list);
        }
Exemplo n.º 8
0
 public ModuleMeta(Assembly asm, ModuleManifest manifest)
 {
     Assembly    = asm;
     ServiceMeta = new ServiceMeta
     {
         Name         = Assembly.GetName().Name,
         ModuleName   = manifest.Name,
         VersionMajor = manifest.Version.Major
     };
     TypeChanger = new TypeConverter.TypeConverter(Assembly);
     ResolveServiceFunctions();
     ResolveServiceModels();
 }
Exemplo n.º 9
0
        protected void notify(ServiceMeta serviceMeta, List <RegisterMeta> array)
        {
            BlockingCollection <INotifyListener> listeners;

            subscribeListeners.TryGetValue(serviceMeta, out listeners);
            if (listeners != null)
            {
                foreach (var item in listeners)
                {
                    item.Notify(array);
                }
            }
        }
Exemplo n.º 10
0
        private List <AddressModel> Parse(string serviceId)
        {
            var address = new List <AddressModel>();

            string[] array = serviceId.Split('.');
            Collection <RegisterMeta> registerMeta = null;
            ServiceMeta temp = new ServiceMeta();

            temp.setName(array[1]);
            temp.setGroup(array[0]);
            temp.setVersion("0.0.0");
            if (!_registerMetaList.ContainsKey(temp))
            {
                registerMeta = _registryService.lookup(temp);
                _registerMetaList.GetOrAdd(temp, registerMeta);
            }
            else
            {
                registerMeta = _registerMetaList[temp];
            }
            _registryService.subscribe(temp, new ZookeeperNotifyListener((meta) =>
            {
                if (!_registerMetaList.ContainsKey(temp))
                {
                    _registerMetaList.TryAdd(temp, registerMeta);
                }
                else
                {
                    _registerMetaList.TryUpdate(temp, registerMeta, _registerMetaList[temp]);
                    registerMeta = _registerMetaList[temp];
                }
            }));

            foreach (var item in registerMeta)
            {
                address.Add(new IpAddressModel()
                {
                    Ip   = item.getHost(),
                    Port = item.getPort()
                });
            }

            return(address);
        }
Exemplo n.º 11
0
        public void subscribe(ServiceMeta serviceMeta, INotifyListener listener)
        {
            BlockingCollection <INotifyListener> listeners;

            subscribeListeners.TryGetValue(serviceMeta, out listeners);

            if (listeners == null)
            {
                BlockingCollection <INotifyListener> newListeners = new BlockingCollection <INotifyListener>();
                subscribeListeners.TryAdd(serviceMeta, newListeners);
                if (listeners == null)
                {
                    listeners = newListeners;
                }
            }
            listeners.Add(listener);

            doSubscribe(serviceMeta);
        }
Exemplo n.º 12
0
        public async Task RegisterAsync(ServiceMeta service)
        {
            await this._client.Agent.ServiceDeregister(service.ServiceId.ToString());


            var reg = new AgentServiceRegistration
            {
                ID      = service.Id,
                Name    = service.ServiceName,
                Address = service.IPAddress,
                Port    = service.Port,
                Tags    = service.Tags
            };

            reg.Check = new AgentServiceCheck();
            reg.Check.DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(50);
            reg.Check.TCP      = $"{service.IPAddress}:{service.Port}";
            reg.Check.Interval = TimeSpan.FromSeconds(10);

            await this._client.Agent.ServiceRegister(reg);
        }
Exemplo n.º 13
0
        public override Collection <RegisterMeta> lookup(ServiceMeta serviceMeta)
        {
            string directory = $"/meou/provider/{serviceMeta.getGroup()}/{serviceMeta.getName()}/{serviceMeta.getVersion()}";
            List <RegisterMeta> registerMetaList = new List <RegisterMeta>();

            try
            {
                var children = configClient.GetChildrenAsync(directory).ConfigureAwait(false).GetAwaiter().GetResult();

                foreach (string p in children)
                {
                    registerMetaList.Add(parseRegisterMeta($"{directory}/{p}"));
                }
            }
            catch (Exception e)
            {
                if (logger.IsEnabled(LogLevel.Warning))
                {
                    logger.LogWarning($"Lookup service meta: {serviceMeta} path failed, {e}.");
                }
            }
            return(new Collection <RegisterMeta>(registerMetaList));
        }
Exemplo n.º 14
0
 public ServiceResponseBase()
 {
     this.Data    = new ServiceMeta();
     this.Headers = new Dictionary <string, object> {
     };
 }
 public ConferenceController(IHttpClientFactory clientFactory, IOptionsMonitor <ServiceMeta> config)
 {
     httpclient = clientFactory.CreateClient();
     meta       = config.CurrentValue;
 }
Exemplo n.º 16
0
 protected abstract void doSubscribe(ServiceMeta serviceMeta);