zoukankan      html  css  js  c++  java
  • [译]Ocelot

    原文

    这里有一个配置的样例。配置主要有两个部分。一个是ReRoutes数组,另一个是GlobalConfiguration。ReRoute告诉Ocelot怎么处理上游的请求。Global configuration能让我们覆盖一些ReRoute的一些配置。

    {
        "ReRoutes": [],
        "GlobalConfiguration": {}
    }
    

    这里是一个ReRoutes的配置样例(你不需要设置下面所有的配置):

    {
              "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等,这样的配置文件。

    .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文件。

    Store configuration in consul

    如果在注册ocelot服务的时候添加了下面的代码,ocelot会将配置信息存储在consul的键值存储中,并且读取也会从consul的键值存储中读取。

    services
       .AddOcelot()
       .AddStoreOcelotConfigurationInConsul();
    

    同时,你需要将下面的代码添加到ocelot.json中。这样Ocelot才能找到Consul和它进行交互,从Consul中存储&加载配置。

    "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
    
  • 相关阅读:
    FreeCAD框架解析
    Python源码的编译与加密
    centos 8及以上安装mysql 8.0
    浮点数运算丢失精度
    使用 Nginx 代理内网 GitLab 并确保 SSH / HTTP 克隆地址正确
    如何实现一个简易版的 Spring
    Spring 是如何造出一个 Bean 的
    从CPU缓存看缓存的套路
    Java 集合类 List 的那些坑
    react 项目中使用antd框架,对导航多层渲染
  • 原文地址:https://www.cnblogs.com/irocker/p/ocelot-configuration.html
Copyright © 2011-2022 走看看