日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

.Net?Core服務(wù)治理Consul使用服務(wù)發(fā)現(xiàn)_自學(xué)過程

作者:老馬-Max ? 更新時間: 2022-03-24 編程語言

先思考一些問題:它是做什么的、以及怎么使用它。帶著這些問題往下走。

consul是做什么的

consul用于微服務(wù)下的服務(wù)治理。服務(wù)治理是什么?它包含但不限于:服務(wù)發(fā)現(xiàn)、服務(wù)配置、健康檢查、鍵值存儲、安全服務(wù)通信、多數(shù)據(jù)中心等。

為什么需要服務(wù)治理?舉個例子:最開始的服務(wù)比較簡單,各服務(wù)之間通過API就能訪問。后面業(yè)務(wù)復(fù)雜了,服務(wù)也跟著復(fù)雜了,搞分布式了,而分布式又必然是多服務(wù)器部署,這就有一個問題:如果服務(wù)之間還是用API訪問,那某個服務(wù)所在的服務(wù)器掛掉以后這個服務(wù)就不能用了,也不能自動轉(zhuǎn)移,那么只能人肉運(yùn)維了。這時候大家在想:如果下游調(diào)用上游,只需要一個統(tǒng)一的地址,不用關(guān)注負(fù)載均衡、節(jié)點(diǎn)失效之類的問題,也不用關(guān)注可用性,這些都有一個中間件來完成,那該有多好。這個中間件要做的事情,就是服務(wù)治理,也就是本文的consul,它就是解決這個事的。但其實(shí)也不是只有它能做這個事,zooKeeper、etcd也能做這個事,也沒有什么高下之分,用什么主要看自己,看公司。對自己來說,哪個摸得透、玩的熟就用哪個。對公司來說,哪個市場認(rèn)可度高就用哪個,說白了就是哪個用的人多。用的人多會的人就多,招人換人速度就快了,互聯(lián)網(wǎng)企業(yè)追求的不就是速度么?“時間就是金錢,效率就是生命”,這句話早期在深圳隨處可見,至今仍然適用。

題外話有點(diǎn)多,接著往下走。

怎么使用consul

這里只講docker內(nèi)的consul。首先下載一個鏡像:

dokcer pull consul

然后運(yùn)行起來:

docker run -itd -p 8700:8500 --name myconsuldemo consul

成功運(yùn)行后能看到如下頁面:

tips:consul的默認(rèn)端口是8500,docker啟動可以映射到任意端口。

服務(wù)注冊

服務(wù)發(fā)現(xiàn)的概念,簡單來說就是所有節(jié)點(diǎn)程序啟動時都去consul注冊一下,注冊后的信息統(tǒng)一保存在consul中以供調(diào)用。是不是很簡單?

現(xiàn)在net core 3.1下完成consul服務(wù)注冊。

首先需要添加nuget包:

然后自行封裝一個注冊服務(wù),節(jié)省時間先上源碼:

public static void Reg(IConfiguration configuration)
        {
            string ip = configuration.GetSection("ip").Value.ToString();

            string port = configuration.GetSection("port").Value.ToString();

            string weight = configuration.GetSection("weight").Value.ToString();

            string address = configuration.GetSection("address").Value.ToString();//consul的啟動地址

            string center = configuration.GetSection("center").Value.ToString();//數(shù)據(jù)中心名稱

            ConsulClient client = new ConsulClient(x =>
            {
                x.Address = new Uri(address);
                x.Datacenter = center;
            });

            client.Agent.ServiceRegister(new AgentServiceRegistration()
            {
                ID = $"server {ip}:{port}",
                Name = "shenzhen-ma",//分組名稱
                Address = ip,
                Port = int.Parse(port)
            });
        }

配置文件:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ip": "127.0.0.1",
  "port": 5100,
  "weight": 1,//權(quán)重,負(fù)載均衡的重要參數(shù)
  "address": "http://127.0.0.1:8700",//consul地址
  "center": "dc1"http://數(shù)據(jù)中心
}

最后,這個服務(wù)需要在程序啟動的時候調(diào)用,只一次就好。直接把調(diào)用放在startup里就好,這樣程序啟動的時候就會自動注冊一個服務(wù)。

為了能夠動態(tài)修改配置文件,接下來通過控制臺啟動程序:

dotnet run --urls="http://*:5000" --ip="127.0.0.1" --port=5000

啟動成功以后,轉(zhuǎn)到consul的ui看一下:

能看到多了一個分組【shenzhen-ma】,點(diǎn)進(jìn)去看下我們的服務(wù):

127.0.0.1:5000,沒毛病。這時候模擬一下多節(jié)點(diǎn),再多啟動兩個程序試試看:

5001,5002也自動注冊進(jìn)入了這個分組。


原文鏈接:https://www.cnblogs.com/muchengqingxin/p/15007491.html

欄目分類
最近更新