原文html
這裏有一個配置的樣例。配置主要有兩個部分。一個是ReRoutes數組,另外一個是GlobalConfiguration。ReRoute告訴Ocelot怎麼處理上游的請求。Global configuration能讓咱們覆蓋一些ReRoute的一些配置。git
{ "ReRoutes": [], "GlobalConfiguration": {} }
這裏是一個ReRoutes的配置樣例(你不須要設置下面全部的配置):github
{ "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, "DangerousAcceptAnyServerCertificateValidator": false }
Ocelot支持如configuration.dev.json, configuration.test.json等,這樣的配置文件。json
.ConfigureAppConfiguration((hostingContext, config) => { config .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath) .AddJsonFile("appsettings.json", true, true) .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true) .AddJsonFile("ocelot.json") .AddJsonFile($"configuration.{hostingContext.HostingEnvironment.EnvironmentName}.json") .AddEnvironmentVariables(); })
能夠使用AddOcelot()
來替換AddJsonFile("ocelot.json")
。數組
.ConfigureAppConfiguration((hostingContext, config) => { config .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath) .AddJsonFile("appsettings.json", true, true) .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true) .AddOcelot() .AddEnvironmentVariables(); })
這種狀況下Ocelot會查找匹配 (?i)ocelot.([a-zA-Z0-9]*).json
的文件,而後合併他們。若是你想設置GlobalConfiguration
屬性,那麼必需要有一個ocelot.global.json
文件。緩存
Ocelot合併配置文件的方式,就是去加載它們,而後循環遍歷這些文件,添加ReRoutes,AggregateReRoutes, and if the file is called ocelot.global.json add the GlobalConfiguration aswell as any ReRoutes or AggregateReRoutes。Ocelot會將合併的文件保存爲ocelot.json
,在ocelot運行的時候使用這個文件。服務器
在合併前不會作任何驗證。若是出現了問題,建議檢查ocelot.json
文件。cookie
若是在註冊ocelot服務的時候添加了下面的代碼,ocelot會將配置信息存儲在consul的鍵值存儲中,而且讀取也會從consul的鍵值存儲中讀取。app
services .AddOcelot() .AddStoreOcelotConfigurationInConsul();
同時,你須要將下面的代碼添加到ocelot.json
中。這樣Ocelot才能找到Consul和它進行交互,從Consul中存儲&加載配置。ide
"GlobalConfiguration": { "ServiceDiscoveryProvider": { "Host": "localhost", "Port": 9500 } }
Ocelot支持當配置文件發生修改後從新加載配置。下面代碼使得當ocelot.json
手動更新後從新加載配置文件。
config.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
若是你使用了Consul來讀取&存儲配置,你可能須要用一個key來標識配置文件,這樣就能夠有多個配置了。只須要設置ServiceDiscoveryProvider
的ConfigurationKey
就能爲配置指定一個key了:
"GlobalConfiguration": { "ServiceDiscoveryProvider": { "Host": "localhost", "Port": 9500, "ConfigurationKey": "Oceolot_A" } }
這樣Ocelot在經過Consul加載配置文件的時候會查找key爲Oceolot_A
的配置。
若是沒有設置ConfigurationKey
, ocelot會使用InternalConfiguration
做爲key。
使用ReRoute
中的HttpHandlerOptions
來設置HttpHandler
的行爲:
AllowAutoRedirect
用來標識請求是否應該redirection responses。設置true
會自動從下游資源redirection response。默認爲:false
。UseCookieContainer
用來標識是否使用CookieContainer
存儲服務器cookie,而且在發送請求的時候帶上這些cookie。默認爲:false
。若是你使用了CookieContainer, Ocelot會爲每一個下游服務緩存HttpClient
。這意味全部對DownstreamService的請求都會共享一樣的cookie。建議不要使用CookieContainer。若是你想忽略SSL警告|錯誤,你須要這樣配置ReRoute:
"DangerousAcceptAnyServerCertificateValidator": false