真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

.NETCore微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

這篇文章主要為大家展示了“.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理”這篇文章吧。

為滄源等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及滄源網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站建設(shè)、滄源網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

一、Consul服務(wù)注冊(cè)之配置文件方式

1.1 重溫Consul實(shí)驗(yàn)集群

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

這里我們有三個(gè)Consul Server節(jié)點(diǎn),一個(gè)Consul Client節(jié)點(diǎn),在Client節(jié)點(diǎn)上跑了兩個(gè)ClientService實(shí)例,分別占用8810和8820端口。至于基于Ocelot的API網(wǎng)關(guān)服務(wù),還沒(méi)有實(shí)現(xiàn),留到以后跟各位分享。這里假設(shè)我們已經(jīng)啟動(dòng)了這幾個(gè)節(jié)點(diǎn),并且能夠成功訪問(wèn)這兩個(gè)ClientService實(shí)例(事先把實(shí)例啟動(dòng)起來(lái),可以通過(guò)IIS,也可以通過(guò)命令行啟動(dòng)Kerstel服務(wù)器運(yùn)行)。

實(shí)例1:192.168.80.71:8810

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

實(shí)例2:192.168.80.71:8820

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

1.2 準(zhǔn)備好json配置文件

這里我準(zhǔn)備了一個(gè)如下所示的JSON配置文件(eg.取名為services_config.json),配置了兩個(gè)服務(wù)在里邊:

{
    "services":[
        {
            "id": "EDC_DNC_MSAD_CLIENT_SERVICE_01",
            "name" : "CAS Client Service",
            "tags": [
                "urlprefix-/ClientService01"
            ],
            "address": "192.168.80.71",
            "port": 8810,
            "checks": [
                {
                    "name": "clientservice_check",
                    "http": "http://192.168.80.71:8810/api/health",
                    "interval": "10s",
                    "timeout": "5s"
                }
            ]
        },
      {
            "id": "EDC_DNC_MSAD_CLIENT_SERVICE_02",
            "name" : "CAS Client Service",
            "tags": [
                "urlprefix-/ClientService02"
            ],
            "address": "192.168.80.71",
            "port": 8820,
            "checks": [
                {
                    "name": "clientservice_check",
                    "http": "http://192.168.80.71:8820/api/health",
                    "interval": "10s",
                    "timeout": "5s"
                }
            ]
        }
     ]
}

至于配置文件的含義,這里不再贅述,和上一篇在代碼中進(jìn)行注冊(cè)的items一致。

編輯完成后,我們?cè)贑onsul Client節(jié)點(diǎn)中新建一個(gè)文件夾,放入json配置文件,然后啟動(dòng)/重啟Consul Client服務(wù):

192.168.80.71>consul agent -bind 0.0.0.0 -client 192.168.80.71 -config-dir=C:\Server\Consul\config -data-dir=C:\Server\Consul\tempdata -node EDC.DEV.WebServer -join 192.168.80.100 

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

啟動(dòng)之后,可以看到Consul已經(jīng)通過(guò)掃描配置文件,去注冊(cè)了這兩個(gè)ClientService的實(shí)例。

1.3 通過(guò)WebUI查看服務(wù)狀況

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

可以看到,兩個(gè)ClientService實(shí)例已經(jīng)成功注冊(cè)。

1.4 通過(guò)API進(jìn)行服務(wù)發(fā)現(xiàn)

URL>192.168.80.100:8500/v1/catalog/service/CAS Client Service

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

可以看到返回了兩個(gè)服務(wù)實(shí)例的信息,當(dāng)然,這里建議服務(wù)名還是不要有空格為好。此外,在服務(wù)發(fā)現(xiàn)的過(guò)程中,會(huì)加以一定的負(fù)載均衡策略,從這兩個(gè)服務(wù)實(shí)例中選擇一個(gè)返回給服務(wù)消費(fèi)端,比如:隨機(jī)、輪詢、加權(quán)輪詢、基于性能的最小連接數(shù)等等。關(guān)于這一塊,會(huì)在后面的API網(wǎng)關(guān)實(shí)踐中跟大家分享。

二、Consul集群之Key/Value存儲(chǔ)

Consul除了可以實(shí)現(xiàn)服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)之外,還提供了強(qiáng)大的KV(Key/Value)存儲(chǔ)。我們可以使用Consul的分層KV存儲(chǔ)干任何事情,比如:動(dòng)態(tài)配置,特征標(biāo)記,協(xié)調(diào),leader選舉等。KV存儲(chǔ)的API是基于http的。

2.1 查看所有KV

我們可以通過(guò)命令行在consul節(jié)點(diǎn)中進(jìn)行查詢:

192.168.80.100>curl -v http://192.168.80.100:8500/v1/kv/?recurse

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

可以看到,返回的是404 Not Found,可見(jiàn)現(xiàn)在木有一個(gè)Key/Value存儲(chǔ)項(xiàng)。

*.關(guān)于?recurse參數(shù)=>用來(lái)指定查看多個(gè)KV

  當(dāng)然我們也可以通過(guò)WebUI來(lái)查看和管理KV,如下圖所示,后續(xù)我們都以Shell命令行來(lái)調(diào)用API,不會(huì)進(jìn)行WebUI界面的調(diào)用。

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

2.2 新增KV

這里假設(shè)我們要配置一個(gè)視頻直播平臺(tái)的賬號(hào):

192.168.80.100>curl -X PUT -d 'edisonchou' http://192.168.80.100:8500/v1/kv/web/vhallaccount

key:vhallaccount, value:edisonchou

添加后可以通過(guò)如下命令調(diào)用接口查看這個(gè)Key的Value

192.168.80.100>curl http://192.168.80.100:8500/v1/kv/web/vhallaccount

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

*.由于Consul的Value是經(jīng)過(guò)Base64編碼的(主要是為了允許非UTF-8的字符),所以這里看到的是編碼后的結(jié)果。我們可以通過(guò)解碼得到最終的Value值。

2.3 驗(yàn)證KV是否同步

由于我們調(diào)用的是Leader節(jié)點(diǎn)進(jìn)行的KV存儲(chǔ),我們想要驗(yàn)證一下是否在另外兩個(gè)節(jié)點(diǎn)進(jìn)行了同步,否則KV只存在一個(gè)節(jié)點(diǎn)達(dá)不到同步的效果。

192.168.80.101 節(jié)點(diǎn):

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

192.168.80.102 節(jié)點(diǎn):

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

可以看到該key值已經(jīng)在集群中三個(gè)節(jié)點(diǎn)進(jìn)行了同步。

2.4 編輯KV和刪除KV

編輯KV其實(shí)和添加KV完全一致,如下所示:

192.168.80.100>curl -X PUT -d 'andyai' http://192.168.80.100:8500/v1/kv/web/vhallaccount

刪除KV主要用到HTTP DELETE

192.168.80.100>curl -X DELETE http://192.168.80.100:8500/v1/kv/web/vhallaccount

這里不再演示結(jié)果。

三、Consul服務(wù)告警之Watch機(jī)制

熔斷保護(hù)在Consul和Ocelot中都有實(shí)現(xiàn),意思就是當(dāng)一個(gè)服務(wù)不正常時(shí)(比如我們的一個(gè)服務(wù)實(shí)例掛了,Consul的健康檢查機(jī)制檢測(cè)到了),應(yīng)該給系統(tǒng)維護(hù)人員給以告警。在Consul中,服務(wù)告警也是通過(guò)配置文件來(lái)實(shí)現(xiàn)的。

3.1 添加watch.json配置文件

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

{
  "watches": [
    {
      "type": "checks",
      "handler_type": "http",
      "state": "critical",
      "http_handler_config": {
        "path": "http://192.168.80.71:9000/notice",
        "method": "POST",
        "timeout": "10s",
        "header": { "Authorization": [ "token" ] }
      }
    }
  ]
}

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

*.有關(guān)watch的細(xì)節(jié),請(qǐng)參考:https://www.consul.io/docs/agent/watches.html

這里編輯完成之后,就可以放到config目錄下了,后面重啟Consul Client Agent服務(wù)時(shí)會(huì)加載新的watches_config.json配置文件。

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

3.2 添加NoticeService服務(wù)

新寫一個(gè)ASP.NET Core WebAPI程序,其主要功能就是接受Consul POST過(guò)來(lái)的參數(shù)并調(diào)用方法發(fā)送電子郵件。

(1)Controller編寫

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

    [Route("api/[controller]")]    public class HomeController : Controller
    {        public IConfiguration Configuration { get; }        public HomeController(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        [HttpPost("/notice")]        public IActionResult Notice()
        {            var bytes = new byte[10240];            var i = Request.Body.ReadAsync(bytes, 0, bytes.Length);            var content = System.Text.Encoding.UTF8.GetString(bytes).Trim('\0');

            EmailSettings settings = new EmailSettings()
            {
                SmtpServer = Configuration["Email:SmtpServer"],
                SmtpPort = Convert.ToInt32(Configuration["Email:SmtpPort"]),
                AuthAccount = Configuration["Email:AuthAccount"],
                AuthPassword = Configuration["Email:AuthPassword"],
                ToWho = Configuration["Email:ToWho"],
                ToAccount = Configuration["Email:ToAccount"],
                FromWho = Configuration["Email:FromWho"],
                FromAccount = Configuration["Email:FromAccount"],
                Subject = Configuration["Email:Subject"]
            };

            EmailHelper.SendHealthEmail(settings, content);            return Ok();
        }
    }

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

不再解釋這段代碼。

(2)SendHealthEmail方法編寫

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

    public class EmailHelper
    {        public static void SendHealthEmail(EmailSettings settings, string content)
        {            try
            {                dynamic list = JsonConvert.DeserializeObject(content);                if (list != null && list.Count > 0)
                {                    var emailBody = new StringBuilder("健康檢查故障:\r\n");                    foreach (var noticy in list)
                    {
                        emailBody.AppendLine($"--------------------------------------");
                        emailBody.AppendLine($"Node:{noticy.Node}");
                        emailBody.AppendLine($"Service ID:{noticy.ServiceID}");
                        emailBody.AppendLine($"Service Name:{noticy.ServiceName}");
                        emailBody.AppendLine($"Check ID:{noticy.CheckID}");
                        emailBody.AppendLine($"Check Name:{noticy.Name}");
                        emailBody.AppendLine($"Check Status:{noticy.Status}");
                        emailBody.AppendLine($"Check Output:{noticy.Output}");
                        emailBody.AppendLine($"--------------------------------------");
                    }                    var message = new MimeMessage();
                    message.From.Add(new MailboxAddress(settings.FromWho, settings.FromAccount));
                    message.To.Add(new MailboxAddress(settings.ToWho, settings.ToAccount));

                    message.Subject = settings.Subject;
                    message.Body = new TextPart("plain") { Text = emailBody.ToString() };                    using (var client = new SmtpClient())
                    {
                        client.ServerCertificateValidationCallback = (s, c, h, e) => true;
                        client.Connect(settings.SmtpServer, settings.SmtpPort, false);
                        client.AuthenticationMechanisms.Remove("XOAUTH2");
                        client.Authenticate(settings.AuthAccount, settings.AuthPassword);
                        client.Send(message);
                        client.Disconnect(true);
                    }
                }
            }            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

這里使用的是MailKit庫(kù)(支持.net core),可以通過(guò)NuGet搜索并安裝,此外為何接受的參數(shù)屬性是這些,大家可以看看Consul官方文檔中watches頁(yè)中的checks類型,見(jiàn)下圖所示:

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

(3)發(fā)布NoticeService到192.168.80.71服務(wù)器中,同樣也可以加入Consul配置文件中:

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理 View Code

發(fā)布完成之后,重啟Consul Client節(jié)點(diǎn)(192.168.80.71)的Consul服務(wù),可以看到NoticeService也注冊(cè)成功:

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

3.3 測(cè)試服務(wù)告警

(1)手動(dòng)在IIS中關(guān)閉一個(gè)ClientService服務(wù),例如:這里我關(guān)閉了ClientService.01

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

(2)查看自動(dòng)發(fā)送的Email內(nèi)容:從Email中我們可以知道哪個(gè)Server節(jié)點(diǎn)的哪個(gè)Service出了問(wèn)題,并且可以大概了解原因(Check Output),這時(shí)我們的系統(tǒng)維護(hù)人員就該起床加班了。

.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理

以上是“.NET Core微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁(yè)題目:.NETCore微服務(wù)之怎么基于Consul實(shí)現(xiàn)服務(wù)治理
瀏覽路徑:http://weahome.cn/article/ghicpj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部