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); }
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); }
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); } }
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); }
/// <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; }
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>()); }
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); }
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(); }
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); } } }
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); }
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); }
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); }
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)); }
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; }
protected abstract void doSubscribe(ServiceMeta serviceMeta);