在上一篇文章我們簡單了解了什么是注冊中心以及Consul的一些概念,也簡單的實現了Consul在.net core api中的使用。
.net core學習筆記,組件篇:服務的注冊與發現(Consul)初篇(一)
今天,我們在上一篇的基礎上做一下擴展,來簡單實現.net core中Consul的健康檢查的功能。
首先,我們添加一個健康檢查的控制器,用來給Consul調用:
1 /// <summary> 2 /// consul心跳檢測地址 3 /// </summary> 4 [Route("HealthCheck")] 5 [ApiController] 6 public class HealthCheckController : ControllerBase 7 { 8 // GET: api/Teams 9 [HttpGet] 10 public ActionResult GetHealthCheck() 11 { 12 Console.WriteLine($"進行心跳檢測:{DateTime.Now}"); 13 return Ok("連接正常"); 14 } 15 }
然后,我們再回到上一篇的服務注冊代碼:
1 // 創建Consul的客戶端連接 2 var consulClient = new ConsulClient(configuration => 3 { 4 // Consul的連接地址 5 configuration.Address = new Uri("http://127.0.0.1:8500"); 6 }); 7 // 創建Consul的服務注冊信息 8 var registration = new AgentServiceRegistration() 9 { 10 // 服務ID 11 ID = Guid.NewGuid().ToString(), 12 // 服務名稱 13 Name = "demoService", 14 // 服務連接地址 15 Address = "https://localhost", 16 // 端口 17 Port = 5001, 18 // AgentServiceRegistration對象還有一些其他屬性,后面有機會再了解 19 Check = new AgentServiceCheck 20 { 21 // consul健康檢查超時間 22 Timeout = TimeSpan.FromSeconds(10), 23 // 服務停止5秒后注銷服務 24 DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5), 25 // consul健康檢查地址 26 HTTP = "https://localhost:5001/HealthCheck", 27 // consul健康檢查間隔時間 28 Interval = TimeSpan.FromSeconds(3), 29 } 30 }; 31 // 注冊服務 32 consulClient.Agent.ServiceRegister(registration);
上面這段代碼的AgentServiceRegistration對象,比之前多了一個Check的屬性:
- Timeout:超時時間,超過多長時間Consul就會判斷這個服務掛了
- DeregisterCriticalServiceAfter:服務注銷時間,Consul判斷你超時之后,過一段時間會注銷服務,注銷時間可能與設置時間會有一段延遲
- HTTP:Consul健康檢查地址,就是我們剛才添加的HealthCheckController
- Interval:Consul健康檢查間隔時間,沒過多長時間去請求HealthCheckController一次
接下來,我們啟動服務提供者項目,來看看實際效果:


從第一張圖我們可以看出來,健康檢查已經成功執行,並且執行時間間隔也是我們設置的3秒一次。
第二張圖我們可以看到多了個All service checks passing的標識,也就是所有服務檢查通過的意思。
接下來我們關閉demoService這個服務,再看看效果:


可以發現該服務顯示檢查失敗,過一段時間后該服務也會自動注銷。
這篇文章暫時就到這里,上面就是.net core對Consul健康檢查最簡單的應用。隨着學習的深入,后面會有相應的學習筆記記錄。
因為本人也是處於探索階段,上面所寫的也僅僅是一些學習筆記,所以一些理解可能不夠准確,希望所寫的一些內容出現錯誤大家能給予包容和指正。
