Ocelot一款.NET下的API閘道器介紹
在當前微服務技術盛行的年代,大家都在大談特談微服務架構,api閘道器等等配套技術,但是我們發現,大多都是java系的一些技術,那咋們.NET系難道沒有嗎?那今天就給大家介紹一款ap閘道器框架:Ocelot
什麼是閘道器
API閘道器—— 它是系統的暴露在外部的一個訪問入口。這個有點像代理訪問的傢伙,就像一個公司的門衛承擔著定址、限制進入、安全檢查、位置引導、等等功能。
什麼是Ocelot
Ocelot是一個用.NET Core實現並且開源的API閘道器,它功能強大,包括了:路由、請求聚合、服務發現、認證、鑑權、限流熔斷、並內建了負載均衡器與Service Fabric、Butterfly Tracing整合。這些功能只都只需要簡單的配置即可完成,下面我們會對這些功能的配置一一進行說明。
Ocelot的實現原理
簡單的來說Ocelot是一堆的asp.net core middleware組成的一個管道。當它拿到請求之後會用一個request builder來構造一個HttpRequestMessage發到下游的真實伺服器,等下游的服務返回response之後再由一個middleware將它返回的HttpResponseMessage對映到HttpResponse上。
Ocelot基本使用
在專案中通過Nuget命令新增Install-Package Ocelot
首先在.Net工程中新增一個ocelot.json檔案
在啟動類中載入配置檔案:
先指定Oclot的對外服務訪問的地址和埠號
接下來才是Ocelot的核心配置:
{ "DownstreamPathTemplate": "/", "UpstreamPathTemplate": "/", "UpstreamHttpMethod": [ "Get" ], "AddHeadersToRequest": {}, "AddClaimsToRequest": {}, "RouteClaimsRequirement": {}, "AddQueriesToRequest": {}, "RequestIdKey": "", "FileCacheOptions": { "TtlSeconds": 0, "Region": "" }, "ReRouteIsCaseSensitive": false, "ServiceName": "", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 51876, } ], "QoSOptions": { "ExceptionsAllowedBeforeBreaking": 0, "DurationOfBreak": 0, "TimeoutValue": 0 }, "LoadBalancer": "", "RateLimitOptions": { "ClientWhitelist": [], "EnableRateLimiting": false, "Period": "", "PeriodTimespan": 0, "Limit": 0 }, "AuthenticationOptions": { "AuthenticationProviderKey": "", "AllowedScopes": [] }, "HttpHandlerOptions": { "AllowAutoRedirect": true, "UseCookieContainer": true, "UseTracing": true }, "UseServiceDiscovery": false }
配置屬性說明:
Downstream是下游服務配置
UpStream是上游服務配置
Aggregates 服務聚合配置
ServiceName, LoadBalancer, UseServiceDiscovery 配置服務發現
AuthenticationOptions 配置服務認證
RouteClaimsRequirement 配置Claims鑑權
RateLimitOptions為限流配置
FileCacheOptions 快取配置
QosOptions 服務質量與熔斷
DownstreamHeaderTransform頭資訊轉發
演示一個基本路由配置:
ReRoutes:是一個數組,裡面包含了多組路由配置;
DownstreamPathTemplate:下游服務的真實地址;
DownstreamScheme:請求協議
DownstreamHostAndPorts:指定下游服務的ip,埠。這裡可以配置負載均衡,比如下游服務應用橫向部署在多臺伺服器上,這裡非常方便的就可以做到負載均衡配置;
UpstreamPathTemplate:對外服務的地址;
UpstreamHttpMethod:配置請求方式;
RateLimitOptions:限流配置
EnableRateLimiting:限流開關
Period:限流統計時間段
PeriodTimespan:多長時間之後,使用者可以再次訪問
Limit:最大允許訪問次數
好了,一個最基本的路由配置就完成了。
其他的功能點後