.Net?Core微服務(wù)網(wǎng)關(guān)Ocelot集成Consul
有consul基礎(chǔ)的都知道,consul可以發(fā)現(xiàn)新增的服務(wù),剔除掉無效的服務(wù),賦予應(yīng)用自動伸縮的能力。而ocelot如果集成了consul,那ocelot也能擁有這些能力,還可以自主選擇負載均衡策略,靈活性更強。
(建議看完前一篇文章再來實踐這一篇,不然可能有難度)
上干貨。
首先打開上一篇新建好的項目,繼續(xù)添加nuget包:
然后注冊相關(guān)服務(wù):
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 } } }
注釋部分是原先常規(guī)的轉(zhuǎn)發(fā)規(guī)則,變色部分是集成consul以后新增的配置。
這里說下配置項LoadBalancerOptions(負載均衡),官方實現(xiàn)了4個負載均衡器,分別是:
- 1、LeastConnection - 跟蹤哪些服務(wù)正在處理請求,并向現(xiàn)有請求最少的服務(wù)發(fā)送新請求。
- 2、RoundRobin - 輪詢。
- 3、NoLoadBalancer - 從配置或服務(wù)發(fā)現(xiàn)中獲取第一個可用服務(wù)。
- 4、CookieStickySessions - 使用 cookie 將所有請求粘貼到特定服務(wù)器。
如果選擇了第四個,那么需要額外的參數(shù)來描述cookie,比如:
"LoadBalancerOptions": { "Type": "CookieStickySessions", "Key": "ASP.NET_SessionId", "Expiry": 1800000 //過期時間 },
關(guān)于負載均衡器,本文不多做詳解,回到主題。
consul需要單獨搭建,所以我準備了一個擁有6個節(jié)點的consul集群:
然后在集群下注冊了3個服務(wù):
這時運行網(wǎng)關(guān)并請求,網(wǎng)關(guān)會把請求自動轉(zhuǎn)到遠程的consul,并且在已有的consul服務(wù)中輪詢調(diào)用。來看一下運行結(jié)果:
多刷新幾下:
如果你得到了類似的結(jié)果,恭喜你,已經(jīng)完成了集成的操作。同時,還可以解鎖一個新操作:熱更新。
熱更新
打開consul控制面板,找到Key/Value,你會發(fā)現(xiàn)這里多了一個鍵值對:
進入查看會發(fā)現(xiàn),這是ocelot的配置:
這一份配置文件里包含了當前版本的ocelot支持的所有配置項,并且修改后即時生效。
改個路由證明下:
原來:"UpstreamPathTemplate": "/MJ/{url}" 現(xiàn)在:"UpstreamPathTemplate": "/{url}"
save以后再請求:
這感覺,酸爽。
既然是搞技術(shù),自然不能脫離實際。上面的consul集群、consul客戶端、網(wǎng)關(guān)程序都部署在不同的阿里云服務(wù)器上,和生產(chǎn)環(huán)境一樣。學(xué)習的話,部署到本機也可以,consul單機也可以。如果你沒有consul基礎(chǔ)或者理解的不清晰,可以看我之前的系列文章,應(yīng)該有幫助,往前翻一翻就有。友情提醒一下,單體的ocelot、consul禁止上生產(chǎn),太脆弱,一掛全完。
到此這篇關(guān)于.Net Core微服務(wù)網(wǎng)關(guān)Ocelot集成Consul的文章就介紹到這了。希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
- ASP.NET Core為Ocelot網(wǎng)關(guān)配置Swagger
- ASP.NET?Core設(shè)置Ocelot網(wǎng)關(guān)限流
- ASP.NET?Core中的Ocelot網(wǎng)關(guān)介紹
- .Net?Core微服務(wù)網(wǎng)關(guān)Ocelot超時、熔斷、限流
- .Net?Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)介紹及集成
- ASP.NET Core Api網(wǎng)關(guān)Ocelot的使用初探
- ASP.NET Core3.1 Ocelot負載均衡的實現(xiàn)
- ASP.NET Core3.1 Ocelot認證的實現(xiàn)
- ASP.NET Core3.1 Ocelot路由的實現(xiàn)
- Asp.Net?Core使用Ocelot結(jié)合Consul實現(xiàn)服務(wù)注冊和發(fā)現(xiàn)
相關(guān)文章
在ASP.NET 2.0中操作數(shù)據(jù)之五十一:從GridView的頁腳插入新記錄
本文介紹在ASP.NET 2.0中如何在GridView的頁腳動態(tài)插入一行新記錄,要顯示頁腳行只需要設(shè)置ShowFooter屬性為true。我們可以這樣對頁腳行進行用戶定制:將每一列轉(zhuǎn)換成TemplateField,并在其FooterTemplate模板定制插入界面。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之三十二:數(shù)據(jù)控件的嵌套
本文主要介紹ASP.NET 2.0中如何在數(shù)據(jù)控件內(nèi)嵌套一個數(shù)據(jù)控件,可以在Repeater控件的ItemTemplate節(jié)點下嵌套各種其他(如Repeater、GridView或DataList等)的控件。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
前面介紹搭建基礎(chǔ)的架構(gòu),下面我們來介紹ASP.NET中,如何利用ObjectDataSource來展現(xiàn)數(shù)據(jù)。通過配置ObjectDataSource,我們指定這些底層的對象,還有這些對象的方法如何映射到ObjectDataSource的Select、Insert、Update和Delete方法。2016-04-04在ASP.NET 2.0中操作數(shù)據(jù)之十四:使用FormView 的模板
前面介紹了GridView和DetailsView控件可以使用TemplateField來自定義輸出,但是呈現(xiàn)的樣式還是一種四四方方的格子狀。當我們想完全自定義的時候,他們就愛莫能助了,這時我們就可以使用FormView控件來實現(xiàn)我們想要的效果了。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之五十四:添加新記錄時包含一個文件上傳選項
上篇文章主要介紹了,ASP.NET 2.0中如何顯示二進制數(shù)據(jù),本文主要介紹如何將圖片上傳,轉(zhuǎn)換成二進制數(shù)據(jù)保存在數(shù)據(jù)庫中。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之二十:定制數(shù)據(jù)修改界面
本文主要介紹如何對GridView的編輯界面進行定制,使GridView在編輯時具有DropDownList和RadioButtonList控件,提供更人性化的界面。2016-05-05解讀ASP.NET 5 & MVC6系列教程(11):Routing路由
這篇文章主要介紹了ASP.NET 5 Routing路由的用法,雖然ASP.NET 5 和MVC6的路由使用方式很簡單,但是相關(guān)的使用規(guī)則卻很復(fù)雜,大家使用的時候需要多加注意。2016-06-06解讀ASP.NET 5 & MVC6系列教程(9):日志框架
這篇文章主要介紹了ASP.NET 5 日志框架,通過基于接口的編程機制和DI依賴注入機制,我們可以很容易實現(xiàn)第三方日志provider的擴展,從而將日志記錄到我們想記錄的任意地方,需要的朋友可以參考下2016-06-06