0)基本概念
consul常用於服務發現 【微服務】
web_Api
\
\ ->注冊服務 raft選舉leader
-----------------------------------------------------------------——
【Server1】<----------------------> 【Server2】
| |
\ /
\ /
【Server3】
-----------------------------------------------------------------——
\
\->發現服務
1)下載
https://www.consul.io/ 注意系統版本
2)設置環境變量
拷貝.exe對應的文件路徑 放到環境變量path中
3)cmd中啟動服務 -dev 表示默認
consul agent -dev
建立集群使用 同一服務器下解決端口占用問題時只能用相同端口注冊一個服務
方式一、
pc-1 【ip:192.168.109.1】
consul agent -server -ui -bootstrap-expect=2 -data-dir=e:\consul -node=consul-1 -client=0.0.0.0 -bind=192.168.109.1 -datacenter=dc1
pc-2 【ip:192.168.109.128】
consul agent -server -ui -bootstrap-expect=2 -data-dir=c:\consul -node=consul-2 -client=0.0.0.0 -bind=192.168.109.128 -datacenter=dc1 -join 192.168.109.1
方式二、
4)打開vs
5)新建web api項目
6)在Startup.cs下修改Configure函數如下
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); String ip = Configuration["ip"];//部署到不同服務器的時候不能寫成127.0.0.1或者0.0.0.0,因為這是讓服務消費者調用的地址 int port = int.Parse(Configuration["port"]);//獲取服務端口 var client = new ConsulClient(ConfigurationOverview); //回調獲取 var result = client.Agent.ServiceRegister(new AgentServiceRegistration() { ID = "ServerNameFirst" + Guid.NewGuid(),//服務編號保證不重復 Name = "ServerFirst",//服務的名稱 集群使用consul Address = ip,//服務ip地址 Port = port,//服務端口 Check = new AgentServiceCheck //健康檢查 { DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服務啟動多久后反注冊 Interval = TimeSpan.FromSeconds(10),//健康檢查時間間隔,或者稱為心跳間隔(定時檢查服務是否健康) HTTP = $"http://{ip}:{port}/api/Health",//健康檢查地址 Timeout = TimeSpan.FromSeconds(5)//服務的注冊時間 } }); }
/// <summary> /// 獲取Consul的實例 /// </summary> /// <param name="obj"></param> private static void ConfigurationOverview(ConsulClientConfiguration obj) { //consul的地址 obj.Address = new Uri("http://127.0.0.1:8500"); //數據中心命名 obj.Datacenter = "dc1"; }
7)設置健康檢查控制器HealthController.cs
[Route("api/[controller]")] public class HealthController : Controller { [HttpGet] public IActionResult Get() => Ok("ok"); }
8)生成項目
9)打開項目對應文件夾 ->bin->Debug->netcoreapp2.0 路徑上輸入cmd 直接進入對應目錄並打開cmd
10)運行命令進行服務注冊 dotnet PeerApi.dll --ip localhost --port 14446 解釋:PeerApi.dll替換成你的dll localhost代替ip地址 注意:如果未放在iis上 輸入localhost代替127.0.0.1 其他ip地址不變 14446 是端口號 替換你的端口
11)打開 http://localhost:8500/ui/dc1/services 【consul自帶的監控頁面】 可以查看到具體注冊的服務
12)服務發現 可以查看鏈接
http://127.0.0.1:8500/v1/catalog/service/ServerFirst 【ServerFirst 為服務名稱】