1. 程式人生 > 實用技巧 >.net core學習筆記,元件篇:服務的註冊與發現(Consul)初篇(二)

.net core學習筆記,元件篇:服務的註冊與發現(Consul)初篇(二)

在上一篇文章我們簡單瞭解了什麼是註冊中心以及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秒一次。

第二張圖我們可以看到多了個Allservicecheckspassing的標識,也就是所有服務檢查通過的意思。

接下來我們關閉demoService這個服務,再看看效果:

可以發現該服務顯示檢查失敗,過一段時間後該服務也會自動登出。


這篇文章暫時就到這裡,上面就是.net core對Consul健康檢查最簡單的應用。隨著學習的深入,後面會有相應的學習筆記記錄。

因為本人也是處於探索階段,上面所寫的也僅僅是一些學習筆記,所以一些理解可能不夠準確,希望所寫的一些內容出現錯誤大家能給予包容和指正。

demoService