有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禁止上生產,太脆弱,一掛全完,
宣告:未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則視為侵權,
本文原創發表于博客園,作者為暮城傾心,歡迎轉載,Donation(掃碼支持作者)↓
-
- 微信
-
- 支付寶
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/356696.html
標籤:架構設計
