1、下载和安装
下载地址:https://www.consul.io/downloads.html
在解压目录运行cmd命令:
consul agent -dev
当出现如下界面表示启动成功:
访问http://localhost:8500/即可进入ui控制界面
当然,也可以添加一下环境变量,下次直接打开cmd就可以启动sonsul了。
2、注册服务与发现
2.1新增注册类
public class ConsulRegister { private IConfiguration _configuration; private IHostApplicationLifetime _lifetime; public ConsulRegister(IConfiguration configuration, IHostApplicationLifetime lifetime) { this._configuration = configuration; this._lifetime = lifetime; } public void Regist() { String ip = _configuration["ip"];//部署到不同服务器的时候不能写成127.0.0.1或者0.0.0.0,因为这是让服务消费者调用的地址 int port = int.Parse(_configuration["port"]);//获取服务端口 命令行参数 Console.WriteLine($"http://{ip}:{port}/api/Health/index"); var client = new ConsulClient(ConfigurationOverview); //回调获取 string serverId = "ServerNameFirst-" + Guid.NewGuid();//服务编号保证不重复 var result = client.Agent.ServiceRegister(new AgentServiceRegistration() { ID = serverId, Name = "BaseDataServer",//服务的名称 Address = ip,//服务ip地址 Port = port,//服务端口 Check = new AgentServiceCheck //健康检查 { DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后反注册 Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔,或者称为心跳间隔(定时检查服务是否健康) HTTP = $"http://{ip}:{port}/api/Health/Index",//健康检查地址 Timeout = TimeSpan.FromSeconds(5)//服务的注册时间 } }); _lifetime.ApplicationStopping.Register(() => { Console.WriteLine($"服务停止{ip}:{port}"); client.Agent.ServiceDeregister(serverId).Wait(); }); } private static void ConfigurationOverview(ConsulClientConfiguration obj) { //consul的地址 obj.Address = new Uri("http://127.0.0.1:8500"); //数据中心命名 obj.Datacenter = "UserCenter"; } }
2.2在程序启动时候调用
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime) { //忽略其他代码 //程序启动时候调用注册类 new ConsulRegister(Configuration, lifetime).Regist(); }
2.3启动服务
在bin目录下分别执行三个命令,启动三个服务
dotnet MicroService.dll --urls="http://*:5210" --ip="127.0.0.1" --port 5210
dotnet MicroService.dll --urls="http://*:5211" --ip="127.0.0.1" --port 5211
dotnet MicroService.dll --urls="http://*:5212" --ip="127.0.0.1" --port 5212
consul就可以顺利发现服务,到此为止,服务端就已经配置完毕。
如果服务有异常,可以通过该地址检查错误:http://localhost:8500/v1/agent/checks。
3、客户端调用
新建控制台应用程序,并添加代码:
class Program { static List<string> Urls = new List<string>(); static void Main(string[] args) { Console.WriteLine("开始输出当前所有服务地址"); Catalog_Nodes().GetAwaiter().GetResult(); for (int i = 0; i < 15; i++) { Console.WriteLine("开始随机请求一个地址服务地址"); int index = new Random().Next(Urls.Count); string url = Urls[index]; Console.WriteLine("请求的随机地址:" + url); var result = new HttpClient().GetAsync(url).Result; Console.WriteLine($"{result.StatusCode}:{result.Content.ReadAsStringAsync().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/Users/GetList"); } } }
运行结果:
这样就完成了注册服务与发现及客户端的调用。
需要查看consul+ocelot联合实现集群的请点击:https://www.cnblogs.com/chenxizhaolu/p/13896843.html
相关参考:
https://www.cnblogs.com/yanbigfeg/p/9199590.html
https://www.cnblogs.com/jpfss/p/11585255.html