1. 程式人生 > >Ocelot中文文件-配置

Ocelot中文文件-配置

原文: Ocelot中文文件-配置

這裡有一個配置的列子。其中有兩個配置塊。一個ReRoutes陣列和一個GlobalConfiguration。ReRoutes配置塊是一些告訴Ocelot如何處理上游請求的物件。Globalconfiguration有些奇特,可以覆蓋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
          },
          "UseServiceDiscovery": false,
          "DangerousAcceptAnyServerCertificateValidator": false
      }

有關如何使用這些選項的更多資訊如下..

多環境

和其他任何asp.net core專案一樣,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 core 文件.

合併配置檔案

此功能在問題Issue 296提出要求,並允許使用者有多個配置檔案,以便管理大型配置。

不直接使用.AddJsonFile("ocelot.json")這樣新增配置,還可以使用AddOcelot()方法新增

.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,如果檔名為ocelot.global.json,則新增GlobalConfiguration以及所有ReRoutes或AggregateReRoutes。 然後Ocelot將合併後的配置儲存到一個名為ocelot.json的檔案中,這才是ocelot執行時配置的真正來源。

目前在這個階段沒有驗證,只有當Ocelot最終合併配置時才會發生驗證。 當你排查問題時要注意這一點。如果您有任何問題,建議您始終檢查ocelot.json中的內容。

將配置儲存在consul中

如果您在註冊服務時新增以下內容,Ocelot將嘗試在consul的KV資料中儲存和檢索其配置。

services
   .AddOcelot()
   .AddStoreOcelotConfigurationInConsul();

您還需要將以下內容新增到您的ocelot.json中。 這使Ocelot知道如何找到您的Consul代理並進行互動以及從Consul載入和儲存配置。

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

我在研究過raft演算法並發現其超級之難後決定建立此功能。 為什麼不利用Consul已經給你的這個便利呢!我想這意味著如果你想最大限度地使用Ocelot,你現在就需要將Consul作為依賴。

此功能在向本地consul代理髮出新請求之前有3秒TTL快取。

重定向 / 使用CookieContainer

在ReRoute配置中使用HttpHandlerOptions來設定HttpHandler行為:

  1. AllowAutoRedirect的值指示請求是否應該遵循重定向響應。 如果請求應該自動重定向來自下游資源的響應,請將其設定為true; 否則為false。 預設值是false。

  2. UseCookieContainerd的值指示處理程式是否使用CookieContainer屬性儲存伺服器cookie,並在傳送請求時使用這些cookie。預設值是false。值得注意的是,如果您使用CookieContainer,Ocelot為每個下游服務快取HttpClient。這意味著對該下游的所有請求都將共享相同的Cookie。 問題274的提出是因為使用者觀察到Cookie被共享了。我試圖想出一個好的解決方案,但我認為是不可能的。如果您不快取客戶端,這意味著每個請求都獲得一個新客戶端並因此獲得一個新的cookie容器。如果您清除快取客戶端容器中的Cookie,則會因為正在進行的請求而競爭。這也意味著後續請求不能使用以前響應中的cookie!總而言之,這不是一個好的局面。我會避免將UseCookieContainer設定為true,除非有一個非常好的理由。只需檢視您的響應頭,並在您的下一個請求把cookie轉發回來!

SSL錯誤

如果您想忽略SSL警告/錯誤,請在ReRoute配置中設定以下內容。

"DangerousAcceptAnyServerCertificateValidator": false

我不建議這麼做,如果可以我建議你建立自己的證書,然後讓本地/遠端的機器信任它。