{ "Routes": [ { //服務名稱,開啟服務發現時需要配置 "ServiceName": "", //下游服務路由模板 "DownstreamPathTemplate": "/{url}", //下游服務http schema "DownstreamScheme": "http", //下游服務的地址,如果使用LoadBalancer的話這里可以填多項 "DownstreamHostAndPorts": [ { "Host": "192.168.1.205", "Port": 12001 }, { "Host": "192.168.1.205", "Port": 11001 } ], "UpstreamPathTemplate": "/{url}", //上游請求http方法,可使用數組 "UpstreamHttpMethod": [ "GET", "POST", "PUT", "DELETE", "OPTIONS" ], /** * 負載均衡的算法: * LeastConnection – 跟蹤哪些服務正在處理請求,並將新請求發送到具有最少現有請求的服務。算法狀態沒有分布在Ocelot集群中。 * RoundRobin – 遍歷可用服務並發送請求。算法狀態沒有分布在Ocelot集群中。 * NoLoadBalancer – 從配置或服務發現中獲取第一個可用服務 * CookieStickySessions - 使用cookie將所有請求粘貼到特定服務器 */ "LoadBalancerOptions": { "Type": "RoundRobin" //以下配置再設置了 CookieStickySessions 后需要開啟 //用於粘性會話的cookie的密鑰 //"Key": "ASP.NET_SessionId", //會話被阻塞的毫秒數 //"Expiry": 1800000 }, //緩存 "FileCacheOptions": { "TtlSeconds": 15 }, //限流 "RateLimitOptions": { //包含客戶端白名單的數組。這意味着該陣列中的客戶端將不受速率限制的影響 "ClientWhitelist": [], //是否啟用端點速率限制 "EnableRateLimiting": true, //指定限制所適用的期間,例如1s,5m,1h,1d等。如果在該期間內發出的請求超出限制所允許的數量,則需要等待PeriodTimespan過去,然后再發出其他請求 "Period": "1s", //指定可以在一定秒數后重試 "PeriodTimespan": 1, //指定客戶端在定義的時間內可以發出的最大請求數 "Limit": 1 }, //熔斷 "QoSOptions": { //允許多少個異常請求 "ExceptionsAllowedBeforeBreaking": 3, //熔斷的時間,單位為毫秒 "DurationOfBreak": 1000, //如果下游請求的處理時間超過多少則自如將請求設置為超時 "TimeoutValue": 5000 }, "HttpHandlerOptions": { //是否開啟路由追蹤 "UseTracing": true } } ], "GlobalConfiguration": { //外部暴露的Url "BaseUrl": "http://localhost:13763", //限流擴展配置 "RateLimitOptions": { //指定是否禁用X-Rate-Limit和Retry-After標頭 "DisableRateLimitHeaders": false, //當請求過載被截斷時返回的消息 "QuotaExceededMessage": "Oh,Oops!", //當請求過載被截斷時返回的http status "HttpStatusCode": 4421, //用來識別客戶端的請求頭,默認是 ClientId "ClientIdHeader": "ClientId" } } }