配置
可以在此處找到示例配置。配置有兩個部分。一組ReRoutes和一個GlobalConfiguration。ReRoutes是告訴Ocelot如何處理上游請求的對象。全局配置有點hacky並允許覆蓋ReRoute特定設置。如果您不想管理大量ReRoute特定設置,這將非常有用。
{
"ReRoutes": [], "GlobalConfiguration": {} }
這是一個示例ReRoute配置,您不需要設置所有這些內容,但這是目前可用的所有內容:
{
"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等。為了實現這一點,請向您添加以下內容
.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中請求了此功能,並允許用戶擁有多個配置文件,以便更輕松地管理大型配置。
您可以像下面一樣調用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的文件。
Ocelot合並文件的方式基本上是加載它們,循環它們,添加任何ReRoutes,添加任何AggregateReRoutes,如果文件名為ocelot.global.json,則添加GlobalConfiguration以及任何ReRoutes或AggregateReRoutes。然后,Ocelot會將合並的配置保存到名為ocelot.json的文件中,這將在ocelot運行時用作事實的來源。
目前在此階段沒有驗證,只有在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,因此它知道從算法中排除任何特定的環境。
在consul中存儲配置
您需要做的第一件事是安裝在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緩存。
更改時重新加載JSON配置
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錯誤
如果要忽略SSL警告/錯誤,請在ReRoute配置中設置以下內容。
"DangerousAcceptAnyServerCertificateValidator": true
我不建議這樣做,我建議您創建自己的證書,然后如果可以的話,讓本地/遠程計算機信任它。