zoukankan      html  css  js  c++  java
  • Ocelot(九)- 教你如何配置Ocelot?

    配置

    可以在此处找到示例配置配置有两个部分。一组ReRoutes和一个GlobalConfiguration。ReRoutes是告诉Ocelot如何处理上游请求的对象。全局配置有点hacky并允许覆盖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
              },
              "DangerousAcceptAnyServerCertificateValidator": false
          }
    

    有关如何使用这些选项的更多信息如下。

    多种环境

    像任何其他asp.net核心项目一样,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核心文档中找到

    合并配置文件

    问题296中请求了此功能,并允许用户拥有多个配置文件,以便更轻松地管理大型配置。

    您可以像下面一样调用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(hostingContext.HostingEnvironment)
                .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中的内容。

    您还可以为Ocelot提供特定路径以查找下面的配置文件。

    .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config
                .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
                .AddJsonFile("appsettings.json", true, true)
                .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
                .AddOcelot("/foo/bar", hostingContext.HostingEnvironment)
                .AddEnvironmentVariables();
        })
    

    Ocelot需要HostingEnvironment,因此它知道从算法中排除任何特定的环境。

    在consul中存储配置

    您需要做的第一件事是安装在Ocelot中提供Consul支持的NuGet包。

    Install-Package Ocelot.Provider.Consul

    然后在注册服务时添加以下内容:Ocelot将尝试在consul KV商店中存储和检索其配置。

    services
       .AddOcelot()
       .AddConsul()
       .AddConfigStoredInConsul();
    

    您还需要将以下内容添加到ocelot.json中。这就是Ocelot如何找到您的Consul代理并进行交互以从Consul加载和存储配置。

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

    我决定在使用Raft一致性算法并发现其超级难度之后创建此功能。为什么不利用领事已经给你这个事实!我想这意味着如果你想充分利用Ocelot,你现在就把领事当作一个依赖。

    在向当地领事代理发出新请求之前,此功能具有3秒ttl缓存。

    更改时重新加载JSON配置

    Ocelot支持在更改时重新加载json配置文件。例如,当手动更新ocelot.json文件时,以下内容将重新创建Ocelots内部配置。

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

    配置密钥

    如果您使用Consul进行配置(或将来使用其他提供程序),您可能需要键入配置,以便可以进行多项配置:) 问题346中请求了此功能为了指定密钥,您需要在配置json文件的ServiceDiscoveryProvider部分中设置ConfigurationKey属性,例如

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

    在此示例中,Ocelot将在Consul中查找时使用Oceolot_A作为配置的关键。

    如果未设置ConfigurationKey,则Ocelot将使用字符串InternalConfiguration作为键。

    跟踪重定向/使用的CookieContainer 

    在ReRoute配置中使用HttpHandlerOptions来设置HttpHandler行为:

    1. AllowAutoRedirect是一个值,指示请求是否应遵循重定向响应。如果请求应自动遵循来自下游资源的重定向响应,则将其设置为true; 否则是假的。默认值为false。

    2. UseCookieContainer是一个值,指示处理程序是否使用CookieContainer属性存储服务器cookie并在发送请求时使用这些cookie。默认值为false。请注意,如果您使用CookieContainer,则Ocelot会为每个下游服务缓存HttpClient。这意味着对该DownstreamService的所有请求将共享相同的cookie。问题274是因为用户注意到cookie正在共享而创建的。我试着想办法解决这个问题,但我认为这是不可能的。如果不缓存客户端,则意味着每个请求都会获得一个新客户端,从而获得一个新的cookie容器。如果您从缓存的客户端容器中清除cookie,则会因飞行请求而获得竞争条件。这也意味着后续请求不使用先前响应中的cookie!总而言之,情况并非如此。除非你有一个非常好的理由,否则我会避免将UseCookieContainer设置为true。只需查看您的回复标题,并在下次请求时将Cookie转发回来!

    SSL错误

    如果要忽略SSL警告/错误,请在ReRoute配置中设置以下内容。

    "DangerousAcceptAnyServerCertificateValidator": true
    

    我不建议这样做,我建议您创建自己的证书,然后如果可以的话,让本地/远程计算机信任它。

  • 相关阅读:
    唤起支付宝的链接地址
    nginx 403 问题解决
    Mac终端生成RAS秘钥对
    nashPay项目遇到的问题
    redis.clients.jedis.exceptions.JedisDataException 解决方案
    Springboot集成Quartz实现分布式任务调度
    Archives版本mysql5.7.23数据库的安装
    Scala语言操作记录
    搭建wordpress个人博客之(2)安装wordpress
    搭建wordpress个人博客之(1)一键安装lnmp[lamp, lnamp]环境
  • 原文地址:https://www.cnblogs.com/letyouknowdotnet/p/11024645.html
Copyright © 2011-2022 走看看