欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Ocelot(九)- 教你如何配置Ocelot?

程序员文章站 2022-07-10 14:00:52
可以在此处找到示例配置。配置有两个部分。一组ReRoutes和一个GlobalConfiguration。ReRoutes是告诉Ocelot如何处理上游请求的对象。全局配置有点hacky并允许覆盖ReRoute特定设置。如果您不想管理大量ReRoute特定设置,这将非常有用。 ......

配置

可以在此处找到示例配置配置有两个部分。一组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。有关这方面的更多信息可以在

合并配置文件

问题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

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