Ocelot中文文檔-Configuration


配置

一個關於Ocelot配置例子在這里。配置有兩個部分。一個數組類型的ReRoutes和一個全局配置。ReRoutes是個對象,告訴Ocelot怎么去處理一個上游請求。全局配置有點繁瑣(is a hacky)並且允許復寫ReRoutes指定的配置。如果你不想管理太多的ReRoutes那些設置那么這是非常有用的。

{
    "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
      }

更多關於如何使用這些選項的信息如下:.

多環境(Mutilple environments)

像其他任何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 docs.

合並配置文件

這個特征是在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屬性,那么你必須有一個文件並命名為coelot.global.json。

Ocelot合並文件的方式就是加載它們,遍歷它們,添加ReRoutes以及AggregateReRoutes ,如果文件是ocelot.global.json,能很好的添加到GlobalConfiguration以及ReRoutes或者AggregateReRoutes。然后Ocelot將合並的配置保存到ocelot.json文件中。當Ocelot運行的時候,這將被用作真正的來源

到目前為止這里沒有驗證,它只發生在當Ocelot驗證最終合並配置的時候。這里有一些事情值得注意當你調查問題的時候。我建議總是檢查ocelot.json如果你有任何問題。

在Consul存儲配置

如果你添加下面的代碼來注冊你自己的Ocelot服務,Ocelot將企圖在Consul 鍵值對存儲中存儲並檢索它的配置

services
   .AddOcelot()
   .AddStoreOcelotConfigurationInConsul();

你還需要在你的ocelot.json添加下面的代碼。這樣Ocelot會發現你的Consul代理並且交互去加載和存儲從Consul的配置。

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

在我研究Raft一致性算法,並且發現非常困難,之后我決定新建這個特征。為什么我不用Consul已經給你們的這些優勢呢!我猜這意味如果你想重復利用Ocelot,就要依賴Consul

在你的本地Consul代理發出一個新請求之前,這個特性有3秒的ttl緩存。

配置鍵

如果你使用了Consul配置(或者其他提供器在這個特征里)你可能想配置你的鍵以便用多個配置。這個特征在 issue 346 被要求。為了指定Key,你需要在配置文件中設置ConfigurationKey屬性在ServiceDiscoveryProvider節點,如下:

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

在這個例子中,當在Consul查詢它的時候,Ocelot將使用Ocelot_A 為你的配置作為鍵。

如果你沒有設置ConfigurationKey,Ocelot將使用字符串InternalConfiguration 作為鍵。

跟隨重定向/使用Cookie容器

在ReRoutes配置中使用HttpHandlerOptions 來設置上游HttpHandler行為:

  1. AllowAutoRedirect 表明該請求是否應該跟隨重定向響應的一個值。如果請求自動遵循來自下游的重定向響應,設置為true。否則為false。默認值為false。
  2. UseCookieContainer 是一個表明當發送請求時是否處理使用CookieContainer 屬性存儲服務器cookies 並且用這些cookies。默認值false。請注意,如果你為每一個下游服務使用CookieContainer,Ocelot會緩存HttpClient。這就意味着所有下游服務請求都講共享一個cookies。Issue 274 被創建是因為用戶注意到cookies是可以被共享的。我嘗試考慮一種好的方式去處理這個,但是我認為這是不可能的。如果你不緩存client那就是說每個請求都獲得一個新的client並因此都有一個新的cookies container。如果你清楚了來自緩存客戶端容器的緩存,那么你將獲得競爭條件在請求中(並發)。這也就是說后面的請求不會使用來自前一個響應的cookies!總而言之,這是不好的。我建議設置UseCookieContainer 為true 除非你有足夠的好理由。只需查看你的響應頭並在你的下個請求轉發回cookies!

SSL 錯誤

要忽略SSL警告或者是錯誤的ID,請再ReRoutes設置一下內容:

"DangerousAcceptAnyServerCertificateValidator": false

我不推薦這么做,我建議創建你自己的憑證信息,然后獲取它的信任通過本地/遠程匹配,如果你可以的話。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM