1. 程式人生 > 實用技巧 >微服務-Consul服務的註冊與發現

微服務-Consul服務的註冊與發現

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();
        }