Consul服务发现在windows下简单使用
ConsulConsul 服务发现在服务发现在 windowswindows 下简单使用下简单使用安装:运行:consul agent -dev显示这个界面说明已经开启成功。页面显示:然后访问 8500 端口就可以看到页面:命令:consul members:输出当前服务的信息,显示的所有配置节点。install-package Consul:在 vs 项目中安装 Consul服务连接:服务连接:开启 consul 服务之后需要把现有的项目连接集群到 consul 服务,这时候需要在项目中注册服务(在 startup.cs 文件下的 Configure 方法):View Code之后在增加一个回调方法:回调方法是代表的 consul 服务的地址配置。private static void ConfigurationOverview(ConsulClientConfiguration obj)/consul 的地址obj.Address = new Uri(“http:/127.0.0.1:8500“);/数据中心命名obj.Datacenter = “dc1“;服务到这里已经是配置完毕。但是我们怎么注销服务哪。当然是有办法的拉。通过 api 我们可以知道 ServiceDeregister 方法是注销服务的方法。那么我们应该怎么写哪:首先我们要去了解一下 IApplicationLifetime 接口:允许消费者在优雅关机期间执行清理工作ApplicationStarted:当应用程序主机已完全启动并将要等待时触发ApplicationStopping:当应用程序主机执行优美关机时触发。请求可能还在运行中。关闭将阻止此事件完成ApplicationStopped:当应用程序主机执行关机时触发。所有请求应该在这一点完成。关机将阻止此事件完成。好了,我的英语确实不好,这些就是自动翻译的意思。不过也能让我们明白大概的意思。知道有这个东西我们就可以实现功能了完整代码:public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime lifetime)if (env.IsDevelopment()app.UseDeveloperExceptionPage();app.UseMvc();String ip = Configuration“ip“;/部署到不同服务器的时候不能写成 127.0.0.1或者 0.0.0.0,因为这是让服务消费者调用的地址 天地棋牌 http:/www.dadiqipaigw.cnint port = int.Parse(Configuration“port“);/获取服务端口var client = new ConsulClient(ConfigurationOverview); /回调获取string serverId = “ServerNameFirst“ + Guid.NewGuid();var result = client.Agent.ServiceRegister(new AgentServiceRegistration()ID = serverId,/服务编号保证不重复Name = “MsgServer“,/服务的名称Address = ip,/服务 ip 地址Port = port,/服务端口Check = new AgentServiceCheck /健康检查 DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),/服务启动多久后反注册Interval = TimeSpan.FromSeconds(10),/健康检查时间间隔,或者称为心跳间隔(定时检查服务是否健康)035 棋牌 http:/www.267774.comHTTP = $“http:/ip:port/api/Health“,/健康检查地址Timeout = TimeSpan.FromSeconds(5)/服务的注册时间 );lifetime.ApplicationStopping.Register() =>Console.WriteLine(“注销方法“);client.Agent.ServiceDeregister(serverId).Wait();/服务停止时取消注册 );运行效果截图:客户端:客户端:简单介绍一个获取服务所有地址,然后打印并从其中随机选取一个进行请求并打印:static List Urls = new List();static void Main(string args)Console.WriteLine(“开始输出当前所有服务地址“);Catalog_Nodes().GetAwaiter().GetResult();/Console.WriteLine(HelloConsul().GetAwaiter().GetResult();Console.WriteLine(“开始随机请求一个地址服务地址“);int index = new Random().Next(Urls.Count);string url = Urlsindex;string param = “;/这里是开始位置param += “;param += “ + “id“ + “:“ + 5 + “,“;param = param.TrimEnd(',');param += “;Console.WriteLine(“请求的随机地址:“ + url);string result = HttpClientHelpClass.PostResponse(url, param, out string statusCode);Console.WriteLine(“返回状态:“ + statusCode);Console.WriteLine(“返回结果:“ + result);Console.ReadLine();public static async Task Catalog_Nodes()var client = new ConsulClient();var nodeList = await client.Agent.Services();var url = nodeList.Response.Values;foreach (var item in url)string Address = item.Address;int port = item.Port;string name = item.Service;Console.WriteLine($“地址:Address:port,name:name“);Urls.Add($“http:/Address:port/api/Test“);