學習筆記----微服務中的服務註冊與發現

前言:簡單介紹微服務中服務註冊與發現的配置使用

 

一,微服務中的服務註冊與發現

分佈式微服務架構中一個應用可能由一組職責單一化的服務組成, 所以服務需要一個統一的管理中間件,往上可以爲方便服務之間的調用,往下可以便於服務的水平擴展以及服務狀態的管理。

服務的註冊:爲每一個服務實例提供註冊的服務組件(比如zookeeper\consul),爲服務發現提供可用服務的目錄

服務的發現:服務模塊能夠被其他調用及時發現

二,微服務中的Consul

1,什麼是Consul

Consul 是HashiCorp公司推出的開源工具,由Go語言開發的服務網格解決方案,提供具有服務發現、配置和分段功能的全功能控制平面

2,Consul的特點

服務發現:Consul 的客戶端可以註冊一個服務,例如 api或mysql,其他客戶端可以使用 Consul 來發現給定服務的提供者。使用 DNS 或 HTTP,應用程序可以輕鬆找到它們所依賴的服務。

健康檢查:Consul 客戶端可以提供任意數量的健康檢查,要麼與給定的服務相關聯(“網絡服務器是否返回 200 OK”),要麼與本地節點(“存 利 用 率 低 於 90%”)相關聯。操作員可以使用此信息來監視集羣健

康狀況,並且服務發現組件可以使用它來將流量從不健的主 機 路由 出 去。

KV 存儲:應用程序可以將 Consul 的分層鍵/值存儲用於多種目的,包括動態配置、功能標記、協調、領導選舉等。簡單的 HTTP API 使其易於使 用。

安全服務通信:Consul 可以爲服務生成和分發 TLS 證書,以建立相互的 TLS 連接。 意圖 可用於定義允許哪些服務進行通信。可以通過實時更 意 圖 輕 松 管 理 服 務 分段,而不是使用複雜的網絡拓撲和靜態防火牆規則。

多數據中心:Consul 支持開箱即用的多個數據中心。這意味着 Consul 的用戶不必擔心構建額外的抽象層以擴展到多個區域。

 

三,Consul的簡單使用

 1,安裝:直接在官網下載解壓即可 (Consul官網:https://www.consul.io/)

 2,運行 在consul.exe目錄下打開命令行執行 consul.exe agent -dev,然後瀏覽器訪問:http://localhost:8500/     

 

 

  3,項目中使用:

     (1)首先Nuget安裝一下Consul:

       

 

 

   

     (2)添加註冊配置:
   

、     ConsulSetHelper:

public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IHostApplicationLifetime lifetime)
        {

            var list = ConsulSetting.List();
            if (list != null && list.Count > 0)
            {
                foreach (var item in list)
                {
                    var consulClient = new ConsulClient(c =>
                    {
                        //consul地址
                        c.Address = new Uri(item.ConsulAddress);
                    });
                    var registration = new AgentServiceRegistration()
                    {
                        ID = item.ID,//服務實例唯一標識
                        Name = item.ServiceName,//服務名
                        Address = item.ServiceIP, //服務IP
                        Port = item.ServicePort,//服務端口
                        Check = new AgentServiceCheck()
                        {
                            DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服務啓動多久後註冊
                            Interval = TimeSpan.FromSeconds(10),//健康檢查時間間隔
                            HTTP = $"http://{item.ServiceIP}:{item.ServicePort}{item.ServiceHealthCheck}",//健康檢查地址
                            Timeout = TimeSpan.FromSeconds(5)//超時時間
                        }
                    };
                    //服務註冊
                    consulClient.Agent.ServiceRegister(registration).Wait();
                    //應用程序終止時,取消註冊
                    lifetime.ApplicationStopping.Register(() =>
                    {
                        consulClient.Agent.ServiceDeregister(registration.ID).Wait();
                    });

                }

            }
            return app;
        }

 

服務註冊就是把服務的基礎信息插入到consul中,同一集羣的服務建議使用相同的Name

 

  Startup:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseRouting();   
            //服務註冊與發現
            app.RegisterConsul(lifetime);
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }

 

 運行效果:

  

 到這個界面就說明服務已經註冊成功,其中consul 是系統默認的實例,OrderService(單機)和ProductService(集羣) 爲測試實例


      
 4,consul服務監聽--Watches
 

   低故障率高可用的系統都不離不開一個及時的健康監控,consul 不僅提供了服務註冊與發現、安全服務通信、多數據中心等功能,還有Watches機制,

   添加一個server.json配置文件

{

  "watches": [
    {
      "type": "checks",//監聽類型
      "state": "critical",//監控服務的狀態值:Passing,Warning,Critical
      "handler_type": "http",
      "http_handler_config": {
        "path": "http://localhost:6001/home/get",//通知路徑
        "method": "get",//通知請求類型
        "header": {
          "x-foo": [ "XX", "XX" ]
        },
        "timeout": "10s",
        "tls_skip_verify": true
      }
    }
  ]
}

   Watches支持如下類型:

  1. Key – 監視指定K/V鍵值對
  2. Keyprefix – Watch a prefix in the KV store
  3. Services – 監視服務列表
  4. nodes – 監控節點列表
  5. service – 監視服務實例
  6. checks- 監視健康檢查的值
  7. event – 監視用戶事件

加上監聽之後需要修改啓動命令:consul.exe agent -config-dir=server.json -dev,server.json和consul.exe放在同一目錄

 

 

 下一篇 Ocelot中的服務發現、註冊、健康檢查以及簡單的服務治理

 

--------to be continue --------

   

     

 

 


         

 

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章