.Net Core 微服務架構基於Ocelot聯合Consul實現服務治理、負載均衡、限流、熔斷(二)

上篇文章我們講到Ocelot實現Api網關,這篇文章我們一起來實現Ocelot與Consul結合實現服務治理;

一般我的習慣喜歡將所有的Nuget引用放在一個Core基類中,避免版本不一致的情況發生;

創建ServiceCore類庫,引用Nuget

Nuget > Install-Package Consul -Version 0.7.2.6

1、創建擴展類實現Consul註冊

using Consul;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using System;

namespace ServiceCore.Consul
{
    public static class AppBuilderExtensions
    {
        public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IApplicationLifetime lifetime, ServiceEntity serviceEntity)
        {
            //請求註冊的 Consul 地址
            var consulClint = new ConsulClient(c => c.Address = new Uri($"http://{serviceEntity.ConsulIP}:{serviceEntity.ConsulPort}"));

            var httpCheck = new AgentServiceCheck()
            {
                DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服務啓動多久後註冊
                Interval = TimeSpan.FromSeconds(10),//健康檢查時間間隔,或者稱爲心跳間隔
                HTTP = $"http://{serviceEntity.IP}:{serviceEntity.Port}/api/health",//健康檢查地址
                Timeout = TimeSpan.FromSeconds(5)
            };

            var registration = new AgentServiceRegistration()
            {
                Checks = new[] { httpCheck },
                ID = Guid.NewGuid().ToString(),
                Name = serviceEntity.ServiceName,
                Address = serviceEntity.IP,
                Port = serviceEntity.Port,
                Tags = new[] { $"urlperfix-/{serviceEntity.ServiceName}" }//添加 urlprefix-/servicename 格式的 tag 標籤,以便 Fabio 識別
            };

            //服務啓動時註冊,內部實現其實就是使用 Consul API 進行註冊(HttpClient發起)
            consulClint.Agent.ServiceRegister(registration).Wait();

            lifetime.ApplicationStopping.Register(() =>
            {
                //服務停止時取消註冊
                consulClint.Agent.ServiceDeregister(registration.ID).Wait();
            });

            return app;
        }
    }
}

並創建ServiceEntity實體

2、修改appsetting.json文件

  • Consul :IP地址及端口號
  • Service :服務名稱、IP地址及端口號

3、修改Startup文件

app.UseOcelot().Wait(),基於上篇文章內容;並創建服務健康檢查地址,默認啓動地址修改爲health

最後我們啓動Consul服務及項目

 

可以看到項目正常跑起來,我們看一下Consul可視化頁面,輸入http://localhost:8500

 

 

 

 

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