一、在nuget引用 Ocelot。
二、建立ocelot.json配置檔案
{ //這裡注意,以前是ReRoutes現在是Routes "Routes": [ { //Upstream表示上游請求,即客戶端請求到API Gateway的請求 "UpstreamPathTemplate": "/client1/{url}", //請求路徑模板 "UpstreamHttpMethod": [ "Get", "Post" ], //請求方法陣列 //"UseServiceDiscovery": true, //啟用服務發現 //Downstream表示下游請求,即API Gateway轉發的目標服務地址 "DownstreamPathTemplate": "/{url}", //下游請求地址模板 "DownstreamScheme": "http", //請求協議,目前應該是支援http和https //A***************指定單個轉發地址 "DownstreamHostAndPorts": [ //請求服務地址,可以有多個 { "Host": "43.138.199.247", "Port": 9000 } ],
// 限流配置 "RateLimitOptions": { "ClientWhitelist": [], //白名單,不會被限流,為空表示訪問的都被限流 "EnableRateLimiting": true, //是否被開啟 "Period": "1s", //1秒鐘超過了Limit定義的會拋異常 "PeriodTimespan": 1, //超過一秒後才可以重新請求 "Limit": 1 }, "AuthenticationOptions": { //認證 "AuthenticationProviderKey": "Bearer", "AllowedScopes": [] },
//熔斷
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 3,
"DurationOfBreak": 20,
"TimeoutValue": 5000
}
- ExceptionsAllowedBeforeBreaking:允許多少個異常請求。
- DurationOfBreak:熔斷的時間(秒)。
- TimeoutValue:下游請求的處理時間超過多少則將請求設定為超時。
}
]}
Downstream是下游服務配置
UpStream是上游服務配置
Aggregates 服務聚合配置
ServiceName, LoadBalancer, UseServiceDiscovery 配置服務發現
AuthenticationOptions 配置服務認證
RouteClaimsRequirement 配置Claims鑑權
RateLimitOptions為限流配置
FileCacheOptions 快取配置
QosOptions 服務質量與熔斷
DownstreamHeaderTransform頭資訊轉發
DownstreamPathTemplate:下游模板
DownstreamScheme:下游服務http schema
DownstreamHostAndPorts:下游服務的地址,如果使用LoadBalancer的話這裡可以填多項
UpstreamPathTemplate: 上游也就是使用者輸入的請求Url模板
UpstreamHttpMethod: 上游請求http方法,可使用陣列
LoadBalancerOptions:
LeastConnection – 將請求發往最空閒的那個伺服器
RoundRobin – 輪流傳送
NoLoadBalance – 總是發往第一個請求或者是服務發現
using Ocelot.DependencyInjection; using Ocelot.Middleware; using System.Net; var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true); builder.Services.AddRazorPages(); builder.Services.AddOcelot(builder.Configuration); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.UseOcelot().Wait(); app.Run();