能夠在此處找到示例配置。配置有兩個部分。一組ReRoutes和一個GlobalConfiguration。ReRoutes是告訴Ocelot如何處理上游請求的對象。全局配置有點hacky並容許覆蓋ReRoute特定設置。若是您不想管理大量ReRoute特定設置,這將很是有用。git
{
"ReRoutes": [], "GlobalConfiguration": {} }
這是一個示例ReRoute配置,您不須要設置全部這些內容,但這是目前可用的全部內容: 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 }, "DangerousAcceptAnyServerCertificateValidator": false }
有關如何使用這些選項的更多信息以下。算法
像任何其餘asp.net核心項目同樣,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();
})
Ocelot如今將使用特定於環境的配置,若是沒有,則返回ocelot.json。緩存
您還須要設置相應的環境變量ASPNETCORE_ENVIRONMENT。有關這方面的更多信息能夠在asp.net核心文檔中找到。服務器
問題296中請求了此功能,並容許用戶擁有多個配置文件,以便更輕鬆地管理大型配置。cookie
您能夠像下面同樣調用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(hostingContext.HostingEnvironment)
.AddEnvironmentVariables();
})
在這種狀況下,Ocelot將查找與模式(?i)ocelot匹配的任何文件。([a-zA-Z0-9] *。)json而後將它們合併在一塊兒。若是要設置GlobalConfiguration屬性,則必須具備名爲ocelot.global.json的文件。app
Ocelot合併文件的方式基本上是加載它們,循環它們,添加任何ReRoutes,添加任何AggregateReRoutes,若是文件名爲ocelot.global.json,則添加GlobalConfiguration以及任何ReRoutes或AggregateReRoutes。而後,Ocelot會將合併的配置保存到名爲ocelot.json的文件中,這將在ocelot運行時用做事實的來源。asp.net
目前在此階段沒有驗證,只有在Ocelot驗證最終合併配置時纔會發生。在調查問題時,須要注意這一點。若是你有任何問題,我建議你一直檢查ocelot.json中的內容。
您還能夠爲Ocelot提供特定路徑以查找下面的配置文件。
.ConfigureAppConfiguration((hostingContext, config) =>
{
config
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
.AddOcelot("/foo/bar", hostingContext.HostingEnvironment)
.AddEnvironmentVariables();
})
Ocelot須要HostingEnvironment,所以它知道從算法中排除任何特定的環境。
您須要作的第一件事是安裝在Ocelot中提供Consul支持的NuGet包。
Install-Package Ocelot.Provider.Consul
而後在註冊服務時添加如下內容:Ocelot將嘗試在consul KV商店中存儲和檢索其配置。
services
.AddOcelot() .AddConsul() .AddConfigStoredInConsul();
您還須要將如下內容添加到ocelot.json中。這就是Ocelot如何找到您的Consul代理並進行交互以從Consul加載和存儲配置。
"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 9500
}
}
我決定在使用Raft一致性算法並發現其超級難度以後建立此功能。爲何不利用領事已經給你這個事實!我想這意味着若是你想充分利用Ocelot,你如今就把領事看成一個依賴。
在向當地領事代理髮出新請求以前,此功能具備3秒ttl緩存。
Ocelot支持在更改時從新加載json配置文件。例如,當手動更新ocelot.json文件時,如下內容將從新建立Ocelots內部配置。
config.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
若是您使用Consul進行配置(或未來使用其餘提供程序),您可能須要鍵入配置,以即可以進行多項配置:) 問題346中請求了此功能!爲了指定密鑰,您須要在配置json文件的ServiceDiscoveryProvider部分中設置ConfigurationKey屬性,例如
"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 9500,
"ConfigurationKey": "Oceolot_A"
}
}
在此示例中,Ocelot將在Consul中查找時使用Oceolot_A做爲配置的關鍵。
若是未設置ConfigurationKey,則Ocelot將使用字符串InternalConfiguration做爲鍵。
若是要忽略SSL警告/錯誤,請在ReRoute配置中設置如下內容。
"DangerousAcceptAnyServerCertificateValidator": true
我不建議這樣作,我建議您建立本身的證書,而後若是能夠的話,讓本地/遠程計算機信任它。