刚做还网站第一时间抓取,vscode怎么做网页,自然资源部网站绿色矿山建设,网站每年空间域名费用及维护费Hi#xff0c;大家好#xff0c;我叫consul#xff0c;翻译成中文叫做“领事”#xff0c;其实我更喜欢叫自己为中介#xff0c;因为我觉得自己做的事情和房产中介非常像。比如说想要卖房的房东到我这边登记#xff0c;我将房屋信息登录到我的表格中#xff08;服务注册… Hi大家好我叫consul翻译成中文叫做“领事”其实我更喜欢叫自己为中介因为我觉得自己做的事情和房产中介非常像。比如说想要卖房的房东到我这边登记我将房屋信息登录到我的表格中服务注册有买家来咨询时我再查询表格将符合条件的房子返回给买家服务发现平时我也要做点房源的维护工作比如每隔一天就打电话问下房东“你的房子还卖么服务健康检查”。我的诞生也和现在互联网项目的开发模式有关从之前的三层架构衍化成现在有微服务架构把原来BLL和DAL层做事按业务拆成独立的分布式服务其实很多人就是把CURD放到单独的服务中而已为了高可用高扩展又把这些服务进程集群化就出现一堆的地址和端口。客户端由原来的进程内调用变成跨进程或跨网络调用服务把这些一堆地址和端口放到配置文件中。这样做其实没什么问题但维护起来比较麻烦比如说增加一个服务就要修改配置文件并重启客户端同理删掉一个服务也要同样的操作。我的作用主要是管理这些集群服务的配置整体流程是这样子的服务进程启动的时候把服务名和自己的IP、端口通过HTTP告诉我我将这些信息记到自己的内存表格中客户端调用时带上要查询的服务名通过HTTP发送给我我再自己的内存表中找到叫这服务名的所有配置发送给客户端。平时我还要做一些服务健康检查的事儿在上面服务启动的时候服务还要给我配置一个检查接口和检查频率等一些参数我会按这些参数每隔一段时间比如10秒钟去请求一下这个接口如果不通我就隔5秒再重试下如果重试3次还不通我就认定这个服务挂掉了就从内存表格中删掉这个服务配置不然客户端要请求到这个不通服务我就罪过了。说了这么多还是看下我的整个流程图吧一图胜千言最后再用代码实现下吧语言是C#其实语言类似反正都有现成的sdk。1、VS中建个控制台应用并通过nuget安装consul包2、注册几个服务static void Main(string[] args)
{string serviceName OrderService;// 注册服务RegisteService(serviceName, new DnsEndPoint(127.0.0.1, 16005));RegisteService(serviceName, new DnsEndPoint(127.0.0.1, 16007));RegisteService(serviceName, new DnsEndPoint(127.0.0.1, 16008));Console.ReadKey();
}
static bool RegisteService(string serviceName, DnsEndPoint dnsEndPoint)
{var serviceId GenServiceId(serviceName, dnsEndPoint);var checkId GenCheckId(serviceName, dnsEndPoint);var checkName GenCheckName(serviceName, dnsEndPoint);var check new AgentCheckRegistration{ID checkId,Name checkName,TCP ${dnsEndPoint.Host}:{dnsEndPoint.Port},Interval TimeSpan.FromSeconds(10),Status HealthStatus.Passing,DeregisterCriticalServiceAfter TimeSpan.FromSeconds(20),};var service new AgentServiceRegistration{ID serviceId,Name serviceName,Address dnsEndPoint.Host,Port dnsEndPoint.Port,Check check};var _client new ConsulClient(config {var uriBuilder new UriBuilder(http://localhost:8500);config.Address uriBuilder.Uri;});var res _client.Agent.ServiceRegister(service).Result;if (res.StatusCode ! HttpStatusCode.OK)return false;return true;
}
3、服务发现static void Main(string[] args)
{string serviceName OrderService;// 服务发现Liststring targets FindServiceEndpoints(serviceName);foreach (var item in targets){Console.WriteLine(item);}Console.ReadKey();
}
static Liststring FindServiceEndpoints(string serviceName)
{var _client new ConsulClient(config {var uriBuilder new UriBuilder(http://localhost:8500);config.Address uriBuilder.Uri;});var targets new Liststring();try{var r _client.Health.Service(serviceName, , true).Result;if (r.StatusCode ! HttpStatusCode.OK)throw new ApplicationException($query consul server error);targets r.Response.Select(x ${x.Service.Address}:{x.Service.Port}).ToList();}catch { }return targets;
}PS不要忘了把consul也做成集群~~