这里有一个配置的列子。其中有两个配置块。一个ReRoutes数组和一个GlobalConfiguration。ReRoutes配置块是一些告诉Ocelot如何处理上游请求的对象。Globalconfiguration有些奇特,可以覆盖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
          },
          "UseServiceDiscovery": false,
          "DangerousAcceptAnyServerCertificateValidator": false
      }

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

多环境

和其他任何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 文档.

合并配置文件

此功能在问题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属性,你必须有一个名为ocelot.global.json的文件。

Ocelot合并文件的方式基本上是加载、循环它们,添加所有ReRoutes,添加所有AggregateReRoutes,如果文件名为ocelot.global.json,则添加GlobalConfiguration以及所有ReRoutes或AggregateReRoutes。 然后Ocelot将合并后的配置保存到一个名为ocelot.json的文件中,这才是ocelot运行时配置的真正来源。

目前在这个阶段没有验证,只有当Ocelot最终合并配置时才会发生验证。 当你排查问题时要注意这一点。如果您有任何问题,建议您始终检查ocelot.json中的内容。

将配置存储在consul中

如果您在注册服务时添加以下内容,Ocelot将尝试在consul的KV数据中存储和检索其配置。

services
   .AddOcelot()
   .AddStoreOcelotConfigurationInConsul();

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

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

我在研究过raft算法并发现其超级之难后决定创建此功能。 为什么不利用Consul已经给你的这个便利呢!我想这意味着如果你想最大限度地使用Ocelot,你现在就需要将Consul作为依赖。

此功能在向本地consul代理发出新请求之前有3秒TTL缓存。

重定向 / 使用CookieContainer

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

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

  2. UseCookieContainerd的值指示处理程序是否使用CookieContainer属性存储服务器cookie,并在发送请求时使用这些cookie。默认值是false。值得注意的是,如果您使用CookieContainer,Ocelot为每个下游服务缓存HttpClient。这意味着对该下游的所有请求都将共享相同的Cookie。 问题274的提出是因为用户观察到Cookie被共享了。我试图想出一个好的解决方案,但我认为是不可能的。如果您不缓存客户端,这意味着每个请求都获得一个新客户端并因此获得一个新的cookie容器。如果您清除缓存客户端容器中的Cookie,则会因为正在进行的请求而竞争。这也意味着后续请求不能使用以前响应中的cookie!总而言之,这不是一个好的局面。我会避免将UseCookieContainer设置为true,除非有一个非常好的理由。只需查看您的响应头,并在您的下一个请求把cookie转发回来!

SSL错误

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

"DangerousAcceptAnyServerCertificateValidator": false

我不建议这么做,如果可以我建议你创建自己的证书,然后让本地/远程的机器信任它。

Ocelot中文文档-配置的更多相关文章

  1. Ocelot中文文档-Route

    路由(Routing) Ocelot主要功能是接收即将发来的请求并转发它们至下游服务.与此同时,以另一个http请求的形式(在将来这可能是任何传输的机制) Ocelot将一个请求的路由描述为另一个路由 ...

  2. Ocelot中文文档入门

    入门 Ocelot仅适用于.NET Core,目前是根据netstandard2.0构建的,如果Ocelot适合您,这个文档可能会有用. .NET Core 2.1 安装NuGet包 使用nuget安 ...

  3. Ocelot中文文档-跟踪

    Ocelot使用一个杰出的项目Butterfly 提供了跟踪功能. 为了使用跟踪,请阅读Butterfly的文档. 在Ocelot中如果你想跟踪一个ReRoute,你需要做如下事情: 在Configu ...

  4. Ocelot中文文档-架构图

    Ocelot 针对的是,使用.net运行微服务和面向服务架构,并且需要一个统一的入口来访问他们系统的人群. 特别是,我想要与IdentityServer和令牌轻松集成. Ocelot是一组有特定顺序的 ...

  5. Ocelot中文文档-不支持

    Ocelot不支持一下几点... 分块编码 - Ocelot将始终获取body大小并返回Content-Length头. 如果这不适合你的场景,只能表示抱歉! 转发host头 - 您发给Ocelot的 ...

  6. Ocelot中文文档-路由

    Ocelot的主要功能是接管进入的http请求并把它们转发给下游服务.目前是以另一个http请求的形式(将来可能是任何传输机制). Ocelot将路由一个请求到另一个请求描述为ReRoute.为了在O ...

  7. Ocelot中文文档-服务发现

    Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ...

  8. Ocelot中文文档-管理

    Ocelot支持在运行时通过一个认证的Http API修改配置.有两种方式对其验证, 使用Ocelot的内置IdentityServer(仅用于向管理API验证请求)或将管理API验证挂接到您自己的I ...

  9. Ocelot中文文档-转换Headers

    Ocelot允许在请求下游服务之前和之后转换头部.目前Ocelot只支持查找和替换.这个功能在Github #190提出.我确定这个功能可以在各个方面发挥作用. 添加到请求 这个功能在GitHub # ...

随机推荐

  1. iOS中 自定义系统相机 作者:韩俊强

    需要框架: #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> 布局如下 ...

  2. 使用dom4j技术对xml文档进行增删改练习(一)

    整个流程如下面代码所以,并对一些重要代码意义做出详细解释: import java.io.File; import java.io.FileOutputStream; import org.dom4j ...

  3. Gradle 1.12 翻译——第十二章 使用Gradle 图形用户界面

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

  4. Chapter 2 User Authentication, Authorization, and Security(3):保护服务器避免暴力攻击

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38756693,专题目录:http://blog.csdn.net/dba_huangzj ...

  5. 【Unity Shaders】Reflecting Your World —— 在Unity3D中创建Cubemaps

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  6. Python学习笔记 - 数据类型和变量

    Python中有整数和浮点数,表示方法和C语言一样 浮点数也很像,不过Python可以用单引号把字符串括起来 字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz ...

  7. Css的学习之旅-css的选择器(2)

    1.最常用的是派生选择器:eg:ul li{ color:red} 2.id选择器:eg:#id{color:red} 3.类选择器:设置标签的class = "",类似id.用点 ...

  8. Java 与 C++ 不一样的地方(持续更新中...)

    本文仅以记录 Java 与 C++ 不同之处,以备随时查询. Java 程序运行机制 Java 是一门编译解释型的语言,即它在运行的过程中既需要编译也需要解释.如下图表示的是 Java 程序运行机制: ...

  9. Github Coding Developer Book For LiuGuiLinAndroid

    Github Coding Developer Book For LiuGuiLinAndroid 收集了这么多开源的PDF,也许会帮到一些人,现在里面的书籍还不是很多,我也在一点点的上传,才上传不到 ...

  10. SpriteBuilder中子节点的相对位置(%百分比定位)

    子节点(或在这里确切的为精灵sprites)50%的偏移效果使得其在父节点中居中显示,该父节点的纹理在左下角(锚点为0,0). 这样做好过用父节点的位置的实际值来定位.根据父节点实际位置来定位在早期的 ...