[譯]Ocelot - Configuration

原文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
}

Multiple environments

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();
        })

Merging configuration files

能夠使用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

Store configuration in consul

若是在註冊ocelot服務的時候添加了下面的代碼,ocelot會將配置信息存儲在consul的鍵值存儲中,而且讀取也會從consul的鍵值存儲中讀取。app

services
   .AddOcelot()
   .AddStoreOcelotConfigurationInConsul();

同時,你須要將下面的代碼添加到ocelot.json中。這樣Ocelot才能找到Consul和它進行交互,從Consul中存儲&加載配置。ide

"GlobalConfiguration": {
    "ServiceDiscoveryProvider": {
        "Host": "localhost",
        "Port": 9500
    }
}

Reload JSON config on change

Ocelot支持當配置文件發生修改後從新加載配置。下面代碼使得當ocelot.json手動更新後從新加載配置文件。

config.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);

Configuration Key

若是你使用了Consul來讀取&存儲配置,你可能須要用一個key來標識配置文件,這樣就能夠有多個配置了。只須要設置ServiceDiscoveryProviderConfigurationKey就能爲配置指定一個key了:

"GlobalConfiguration": {
    "ServiceDiscoveryProvider": {
        "Host": "localhost",
        "Port": 9500,
        "ConfigurationKey": "Oceolot_A"
    }
}

這樣Ocelot在經過Consul加載配置文件的時候會查找key爲Oceolot_A的配置。

若是沒有設置ConfigurationKey, ocelot會使用InternalConfiguration做爲key。

Follow Redirects / Use CookieContainer

使用ReRoute中的HttpHandlerOptions來設置HttpHandler的行爲:

  • AllowAutoRedirect用來標識請求是否應該redirection responses。設置true會自動從下游資源redirection response。默認爲:false
  • UseCookieContainer用來標識是否使用CookieContainer存儲服務器cookie,而且在發送請求的時候帶上這些cookie。默認爲:false。若是你使用了CookieContainer, Ocelot會爲每一個下游服務緩存HttpClient。這意味全部對DownstreamService的請求都會共享一樣的cookie。建議不要使用CookieContainer。

SSL Errors

若是你想忽略SSL警告|錯誤,你須要這樣配置ReRoute:

"DangerousAcceptAnyServerCertificateValidator": false
相關文章
相關標籤/搜索