上一篇文章介紹了在.Net Core中如何使用Ocelot:https://www.cnblogs.com/yangleiyu/p/16847439.html
本文介紹在ocelot的請求聚合與負載均衡設定。
Ocelot可以定義多組路由,然後根據優先順序對上游服務發出的請求進行不同的轉發處理,每個路由轉發都匹配唯一的一個下游服務API介面。但是有時候,上游服務想要獲得來自兩個API介面返回的結果。Ocelot允許我們在組態檔中宣告聚合路由Aggregates,從而實現這樣的效果
可以看到這裡多加了一個Key屬性。Aggregates跟Routes是同級的,而且也是一個陣列,這代表著我們可以宣告多個聚合路由,而在我們宣告的這一組聚合路由中的屬性RouteKeys,它包含的元素就是我們真正需要響應的路由的Key屬性值。
僅支援GET方式
下游服務返回型別要求為application/json
返回內容型別為application/json,不會返回404請求
此處必須返回Json,下游介面返回型別必須為IActionResult,如果返回String,那麼聚合返回的下游json就會是亂碼(別問我怎麼知道的,又踩坑了)
自定義請求聚合,此處暫不過多說明,後續介紹
我們全部的路由設定中都是一組路由設定一個下游服務地址,也就說明當上游服務請求一個Url,Ocelot就必定轉發給某一個固定的下游服務,這樣其實是不安全的,因為有可能某一個下游服務阻塞,甚至掛掉了,那就可能導致整個服務癱瘓了,這肯定是不行的。Ocelot能夠通過可用的下游服務對每個路由進行負載平衡。我們來看看具體的路由設定
LeadConnection負載均衡器演演算法共有4種:
LeastConnection 把新請求傳送到現有請求最少的服務上
RoundRobin 輪詢可用的服務並行送請求
NoLoadBalancer 不負載均衡,總是發往第一個可用的下游服務
CookieStickySessions 使用cookie關聯所有相關的請求到制定的服務
注意:經測,官網上面說的時輪詢可用的服務,但是測試發現並不是,不可用的會報錯
{ "GlobalConfiguration": { "BaseUrl": "http://192.168.50.118:8003/" //閘道器暴露的的地址。 }, "Routes": [ { "UpstreamPathTemplate": "/QiantoonService/Oam", //上游Api請求路由規則 "DownstreamPathTemplate": "/QiantoonService/Oam/Oam", //閘道器轉發到下游路由規則 "UpstreamHttpMethod": [ "Get" ], //上下游支援請求方法 "DownstreamScheme": "http", //下游服務設定 "DownstreamHostAndPorts": [ { "Host": "192.168.50.118", //下游地址 "Port": 8001 //下游埠號 } ], "Key": "Oam" }, { "UpstreamPathTemplate": "/QiantoonService/SelfReg", //上游Api請求路由規則 "DownstreamPathTemplate": "/QiantoonService/SelfReg/SelfReg", //閘道器轉發到下游路由規則 "UpstreamHttpMethod": [ "Get" ], //上下游支援請求方法 "DownstreamScheme": "http", //下游服務設定 "DownstreamHostAndPorts": [ { "Host": "192.168.50.118", //下游地址 "Port": 8002 //下游埠號 }, { "Host": "192.168.50.118", //下游地址 "Port": 8004 //下游埠號 } ], "Key": "Reg", "LoadBalancerOptions": { "Type": "RoundRobin" } } ], "Aggregates": [ { "RouteKeys": [ "Oam", "Reg" ], "UpstreamPathTemplate": "/QiantoonService" } ] }
本文來自部落格園,作者:yangleiyu,轉載請註明原文連結:https://www.cnblogs.com/yangleiyu/p/16850474.html