.Net Core 基礎學習筆記(二) Consul配置使用
阿新 • • 發佈:2021-06-24
1.拉取consul映象
docker pull consul2.啟動consul
docker run -d -p 8500:8500 --name=consul consul:latest agent -server -bootstrap-expect 1 -ui -node=1 -client='0.0.0.0'
- agent: 表示啟動 Agent 程序。
- server:表示啟動 Consul Server 模式
- client:表示啟動 Consul Cilent 模式。
- bootstrap:表示這個節點是 Server-Leader ,每個資料中心只能執行一臺伺服器。技術角度上講 Leader 是通過 Raft 演算法選舉的,但是叢集第一次啟動時需要一個引導 Leader,在引導群集後,建議不要使用此標誌。
- ui:表示啟動 Web UI 管理器,預設開放埠 8500,所以上面使用 Docker 命令把 8500 埠對外開放。
- node:節點的名稱,叢集中必須是唯一的,預設是該節點的主機名。
- client:consul服務偵聽地址,這個地址提供HTTP、DNS、RPC等服務,預設是127.0.0.1所以不對外提供服務,如果你要對外提供服務改成0.0.0.0
- join:表示加入到某一個叢集中去。 如:-json=192.168.0.11。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IApplicationLifetime applicationLifetime) {5.踩坑點記錄 服務註冊至consul時,服務ip地址不可新增http字首,會導致閘道器服務發現地址不可用,健康檢查地址需要加上httpstring ip = "localhost"; int port = 8101; string serviceName = "Service1"; string serviceId = serviceName + Guid.NewGuid(); using (var client = new ConsulClient(ConsulConfig)) { var agentCheck = new AgentServiceCheck { DeregisterCriticalServiceAfter= TimeSpan.FromSeconds(5), //服務停止多久後反註冊 Interval = TimeSpan.FromSeconds(10), //健康檢查時間間隔,或者稱為心跳 HTTP = $"http://{ip}:{port}/api/health", //健康檢查地址 Timeout = TimeSpan.FromSeconds(5) }; //註冊服務到Consul client.Agent.ServiceRegister(new AgentServiceRegistration() { ID = serviceId, //服務編號,不能重複 Name = serviceName, //服務名字 Address = ip,//服務提供者的能被服務消費者訪問的IP地址(可以被其他應用訪問的地址,本機測試使用127.0.0.1,但在實際生產環境上一定要使用內網IP地址) Port = port, //服務提供者的能被服務消費者訪問的埠 Check = agentCheck }).Wait(); //Consul客戶端的所有方法幾乎都是非同步方法,但是都沒有按照規範加上Async字尾,所以容易誤導,記得呼叫後要Wait()或者await Console.WriteLine("logs:-----健康檢查地址:" + agentCheck.HTTP); } applicationLifetime.ApplicationStopped.Register(() => { using (var client = new ConsulClient(ConsulConfig)) { //登出服務 client.Agent.ServiceDeregister(serviceId).Wait(); } }); app.UseConfigure(env); } public void ConsulConfig(ConsulClientConfiguration c) { c.Address = new Uri("http://localhost:8500"); c.Datacenter = "dc1"; }