.Net Core微服務網關Ocelot集成Consul
有consul基礎的都知道,consul可以發現新增的服務,剔除掉無效的服務,賦予應用自動伸縮的能力。而ocelot如果集成瞭consul,那ocelot也能擁有這些能力,還可以自主選擇負載均衡策略,靈活性更強。
(建議看完前一篇文章再來實踐這一篇,不然可能有難度)
上幹貨。
首先打開上一篇新建好的項目,繼續添加nuget包:
然後註冊相關服務:
public void ConfigureServices(IServiceCollection services) { services.AddOcelot() .AddConsul() .AddConfigStoredInConsul(); }
接下來還需要修改下配置文件:
{ "Routes": [ { "DownstreamPathTemplate": "/{url}", "DownstreamScheme": "http", //"DownstreamHostAndPorts": [ // { // "Host": "123.123.123.123", // "Port": 5050 // } //], "UpstreamPathTemplate": "/MJ/{url}", "UpstreamHttpMethod": [ "Get", "Post" ], "ServiceName": "study_consul", "LoadBalancerOptions": { "Type": "RoundRobin" } } ], "GlobalConfiguration": { "ServiceDiscoveryProvider": { "Host": "42.193.182.64", "Port": 88 } } }
註釋部分是原先常規的轉發規則,變色部分是集成consul以後新增的配置。
這裡說下配置項LoadBalancerOptions(負載均衡),官方實現瞭4個負載均衡器,分別是:
- 1、LeastConnection – 跟蹤哪些服務正在處理請求,並向現有請求最少的服務發送新請求。
- 2、RoundRobin – 輪詢。
- 3、NoLoadBalancer – 從配置或服務發現中獲取第一個可用服務。
- 4、CookieStickySessions – 使用 cookie 將所有請求粘貼到特定服務器。
如果選擇瞭第四個,那麼需要額外的參數來描述cookie,比如:
"LoadBalancerOptions": { "Type": "CookieStickySessions", "Key": "ASP.NET_SessionId", "Expiry": 1800000 //過期時間 },
關於負載均衡器,本文不多做詳解,回到主題。
consul需要單獨搭建,所以我準備瞭一個擁有6個節點的consul集群:
然後在集群下註冊瞭3個服務:
這時運行網關並請求,網關會把請求自動轉到遠程的consul,並且在已有的consul服務中輪詢調用。來看一下運行結果:
多刷新幾下:
如果你得到瞭類似的結果,恭喜你,已經完成瞭集成的操作。同時,還可以解鎖一個新操作:熱更新。
熱更新
打開consul控制面板,找到Key/Value,你會發現這裡多瞭一個鍵值對:
進入查看會發現,這是ocelot的配置:
這一份配置文件裡包含瞭當前版本的ocelot支持的所有配置項,並且修改後即時生效。
改個路由證明下:
原來:"UpstreamPathTemplate": "/MJ/{url}" 現在:"UpstreamPathTemplate": "/{url}"
save以後再請求:
這感覺,酸爽。
既然是搞技術,自然不能脫離實際。上面的consul集群、consul客戶端、網關程序都部署在不同的阿裡雲服務器上,和生產環境一樣。學習的話,部署到本機也可以,consul單機也可以。如果你沒有consul基礎或者理解的不清晰,可以看我之前的系列文章,應該有幫助,往前翻一翻就有。友情提醒一下,單體的ocelot、consul禁止上生產,太脆弱,一掛全完。
到此這篇關於.Net Core微服務網關Ocelot集成Consul的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- .Net Core微服務網關Ocelot基礎介紹及集成
- Python腳本讀取Consul配置信息的方法示例
- .Net Core服務治理Consul健康檢查
- Python 使用 consul 做服務發現示例詳解
- Consul的搭建和.Net5的註冊和獲取方法(Win10簡單版)