zoukankan      html  css  js  c++  java
  • 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
    

    我不推荐这么做,我建议创建你自己的凭证信息,然后获取它的信任通过本地/远程匹配,如果你可以的话。

  • 相关阅读:
    parseInt()的用法
    报文
    express的中间件与next()
    前后端分离与前后端不分离
    jQuery中四个绑定事件的区别 on,bind,live,delegate
    TCP传输的三次握手四次挥手策略
    报文
    HTTP和HTTPS以及两者的区别
    前后端不分离与分离
    express中间件的next()方法
  • 原文地址:https://www.cnblogs.com/ms27946/p/Ocelot-ChineseDoc-Configuration.html
Copyright © 2011-2022 走看看