1. 程式人生 > 程式設計 >.Net Core服務治理Consul自動擴充套件和服務呼叫

.Net Core服務治理Consul自動擴充套件和服務呼叫

今天有寫文章的時間了,開心。延續上一篇的話題繼續,順便放上一篇的傳送門:點這裡。

服務呼叫

既然服務註冊已經搞完了,那麼現在就開始呼叫這些註冊好的服務。先做一下準備動作,把consul容器跑起來:

.Net Core服務治理Consul自動擴充套件和服務呼叫

開啟控制檯確認正常:

.Net Core服務治理Consul自動擴充套件和服務呼叫

然後多跑幾個應用程式模擬多點部署:

.Net Core服務治理Consul自動擴充套件和服務呼叫

程式跑完以後檢察一下服務列表:

.Net Core服務治理Consul自動擴充套件和服務呼叫

戳進去看看:

.Net Core服務治理Consul自動擴充套件和服務呼叫

一切準備就緒,完美。然後進入編碼環節。老規矩,直接上碼:

public static string Convert(string consulUri,string centerName,string reqUri)
        {www.cppcns.com
            ConsulClient client = new ConsulClient(x =>
            {
                x.Address = new Uri(consulUri);
                x.Datacenter = centerName;
            });

            //獲取consul中註冊的服務列表
            var consulServiceList = client.Agent.Services().Result.Response;

            //統一請求地址
            Uri uri = new Uri(reqUri);

            //取出分組名稱
            string groupName = uri.Host;

            //匹配出對應的服務
            var serviceList = consulServiceList.Where(x => x.Value.Service.ToLower().Equals(groupName.ToLower())).ToArray();

            //隨機訪問策略
            var service = serviceList[new Random().Next(serviceList.Lengt
h)].Value; return $"{uri.Scheme}://{service.Address客棧}:{service.Port}{uri.PathAndQuery}"; }

上面是自行封裝的方法,作用很簡單:把通用的請求地址轉換為實際發起請求的地址,比如呼叫起來是這樣的:

string realUri = ConsulService.Convert("http://127.0.0.1:8700","dc1","http://shenzhen-ma/v1/client/base/index");

發現了麼,分組名稱“shenzhen-ma”直接替代了具體的ip和埠。這樣做真的可以拿到請求結果麼?隨便寫一個測試用的controller:

public async Task<IActionResult> Post()
        {
            string realUri = ConsulService.Convert("http://127.0.0.1:8700","http://shenzhen-ma/v1/client/base/index");

            string result = await Service.Tool.HttpHelper.Get(realUri);

            return Ok(result);
        }

看請求結果:

.Net Core服務治理Consul自動擴充套件和服務呼叫

5001應用程式請求到了5004的資料。多試幾下再看看:

.Net Core服務治理Consul自動擴充套件和服務呼叫

.Net Core服務治理Consul自動擴充套件和服務呼叫

.Net Core服務治理Consul自動擴充套件和服務呼叫

很顯然,通過統一的請求地址,實際的請求分發到了不同的節點上。

覆盤一波

到剛才,我已經完成了服務呼叫這個關鍵步驟。consul做了什麼呢?它幫我們把統一的請求地址轉換成了真實發生作用的請求地址。未來如果增加了新的伺服器,無需調整,它自己就能夠發現新的服務——這就是大家廣泛理解的服務發現。實際上,這個功能就賦予了我們動態增加節點的能力。能伸能縮,是微服務的一個重要特徵。當然,因為沒有配置健康檢查,我的consul現在還不能自動移除不可用的服務,能伸不能縮,很尷尬。這個麼,時間有限,放在下一篇文章去寫。這一篇文章能講清楚服務呼叫,並由此能理解什麼是服務發現,我覺得就達標。

到此這篇關於.Net Core服務治理Consul自動擴充套件和服務呼叫的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援我們。