/// <summary> /// 注册服务 /// </summary> /// <param name="serviceEntity"></param> public void RegisterConsul(ServiceEntity serviceEntity) { //注册本地Client节点 try { var httpcheck = new AgentServiceCheck() //配置健康检查 { DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5), //服务启动多久后注册 Interval = TimeSpan.FromSeconds(10), //健康检查时间间隔,或者称为心跳间隔 HTTP = $"http://{serviceEntity.IP}:{serviceEntity.Port}/{serviceEntity.CheckUrl}", //健康检查地址 Timeout = TimeSpan.FromSeconds(20), }; var registration = new AgentServiceRegistration()//配置服务注册参数 { Checks = new[] { httpcheck }, ID = serviceEntity.ServiceID(), Name = serviceEntity.ServiceName, Address = serviceEntity.IP, Port = serviceEntity.Port, Tags = serviceEntity.Tags //new[] { $"urlprefix-/{serviceEntity.ServiceName}" }//添加 urlprefix-/servicename 格式的 tag 标签,以便 Fabio 识别 }; //定义重试机制 5次重试 延时加载 var policy = Polly.Policy.HandleResult <List <CatalogService> >(r => { return(r.Find(x => x.ServiceID == registration.ID && x.ServiceName == registration.Name) == null); }).WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))); List <CatalogService> findService = policy.Execute(() => { _consulClient.Agent.ServiceRegister(registration).Wait();//服务注册 var services = _consulClient.Catalog.Service(registration.Name).Result.Response.ToList(); return(services); }); } catch (Exception ex) { if (ex.InnerException != null) { LogService.Default.Fatal("服务注册失败:(当前配置的服务写地址" + $"{_consulOption.Host}" + "):" + ex.InnerException.Message); } else { LogService.Default.Fatal("服务注册失败:(当前配置的服务写地址" + $"{_consulOption.Host}" + "):" + ex.Message); } } }
/// <summary> /// 取消服务注册 /// </summary> /// <param name="serviceEntity"></param> public void DisposeRegister(ServiceEntity serviceEntity) { try { _consulClient.Agent.ServiceDeregister(serviceEntity.ServiceID()).Wait(); } catch (Exception ex) { if (ex.InnerException != null) { LogService.Default.Fatal("取消服务注册失败(当前配置的服务写地址" + $"{_consulOption.Host}" + "):" + ex.InnerException.Message); } else { LogService.Default.Fatal("取消服务注册失败;(当前配置的服务写地址" + $"{_consulOption.Host}" + "):" + ex.Message); } } }