微服務-Consul服務的註冊與發現
阿新 • • 發佈:2020-08-05
1.下載Consul
2.在Consul程式所在資料夾使用CMD命令:consul.exe agent -dev
3.開啟瀏覽器輸入:http://loclhost:8500
4.註冊服務與發現服務(應在專案執行時進行註冊)
1)開啟介面專案
2)引用Consul包
3)新建HealthController寫健康檢查介面(通過呼叫介面,根據返回狀態判斷是否正常)
[Route("api/[controller]/[action]")] [ApiController] public class HealthController : ControllerBase { public IActionResult Index() { return new JsonResult("ok"); } }
4)新建一個ConsulHelper幫助類,定義一個註冊方法
public static void ConsulRegist(this IConfiguration configuration) { ConsulClient client = new ConsulClient(c => { c.Address = new Uri("http://localhost:8500"); c.Datacenter = "dc1"; }); // 該專案資料夾下cmd命令:dotnet xx.dll --urls="http://*:9090" --ip:"127.0.0.1" --port:9090 var address = configuration["ip"]; // 使用命令執行專案傳遞的ip地址; var port = int.Parse(configuration["port"]); // 使用命令執行專案傳遞的埠 client.Agent.ServiceRegister(new AgentServiceRegistration() { ID = "service" + Guid.NewGuid(), // 唯一的 Name = "BesosService", // 組名稱-Group Address = address, Port = port, Tags = new string[] { $"http://{address}:{port}/api/Health/Index" }, // 標籤,// 心跳健康檢查 Check = new AgentServiceCheck() { Interval = TimeSpan.FromSeconds(12), // 間隔12s一次 HTTP = $"http://{address}:{port}/api/Health/Index", // 調健康檢查介面 Timeout = TimeSpan.FromSeconds(5), // 檢查等待時間 DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(60) // 失敗後多久移除 最小值60s } }) ; }
5)可放在Starup.cs檔案的Configure方法中或者Program.cs檔案的主程式入庫處
// 執行且執行一次,註冊Consul ConsulHelper.ConsulRegist();
6)服務的發現(如何獲得已註冊的服務的資訊)
public void Found() { ConsulClient client = new ConsulClient(c => { c.Address = new Uri("http://localhost:8500"); c.Datacenter = "dc1"; }) var response = client.Agent.Services().Result.Response; var serviceDictionary = response.Where(c => c.Value.Service.Equals("BesosService", StringComparison.OrdinalIgnoreCase)) .ToArray(); }