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