配置

一个关于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

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

Ocelot中文文档-Configuration的更多相关文章

  1. Ocelot中文文档-Route

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

  2. Ocelot中文文档入门

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

  3. Ocelot中文文档-管理

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

  4. Ocelot中文文档-跟踪

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

  5. Ocelot中文文档-不支持

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

  6. Ocelot中文文档-路由

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

  7. Ocelot中文文档-Raft(实验功能不能用于生产环境)

    Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现. 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能. Raft是一种分布式一致性 ...

  8. Ocelot中文文档-配置

    这里有一个配置的列子.其中有两个配置块.一个ReRoutes数组和一个GlobalConfiguration.ReRoutes配置块是一些告诉Ocelot如何处理上游请求的对象.Globalconfi ...

  9. .NET Core开源API网关 – Ocelot中文文档

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...

随机推荐

  1. 《mysql必知必会》学习_第15章_20180806_欢

    第15章:联结表 P98 外键:外键为某个表的一列A,同时这一列包含另一个表的主键值B(B属于A,等于或者小于的关系) P99 select vend_name,prod_name,prod_pric ...

  2. Python序列结构--列表(一)

    列表 列表**包含若干元素的有序连续内存空间**,当列表增加或删除元素时,**列表对象自动进行内存的扩展或收缩**,从而**保证相邻元素之间没有缝隙**.但插入和删除非尾部元素时涉及列表元素大量的移动 ...

  3. struts2框架学习笔记1:搭建测试

    Servlet是线程不安全的,Struts1是基于Servlet的框架 而Struts2是基于Filter的框架,解决了线程安全问题 因此Struts1和Struts2基本没有关系,只是创造者取名问题 ...

  4. Android 开发工具推荐

    简评: 自己过去在 Android 开发中发现的好工具,在这里分享给大家.: ) Library methods count 每一个 Android App 的开发中都会用到很多的库,这个工具能够让你 ...

  5. PHP使用Zend Opcache之优化加速和缓存清理总结

    简介 字节码缓存不是php的新特性,有很多独立性的扩展可以实现缓存,比如PHP Cache(APC),eAccelerator,ionCube和XCache等等.但是到目前为止,这些独立的扩展并没有集 ...

  6. 纯JavaScript实现俄罗斯方块(详细注释,ES6)

    借鉴了慕课网的课程<基于websocket的火拼俄罗斯(单机版)>虽然改动比较多,但是还是核心部分没有改,加了一些不怎么好听的声音,和看起来并不好看的界面. CSS部分基本是瞎写的,因为对 ...

  7. ubuntu18.04 出现 Command 'ifconfig' not found 问题的解决办法

    我们在虚拟主机中查看ip地址需要输入ifconfig,但是报以下错误: 系统提示我们安装 net-tools,当我们输入以下命令,即可安装完成. sudo apt-get install net-to ...

  8. 基于Flume的日志收集系统方案参考

    前言 本文将简单介绍两种基于Flume的日志收集系统可能的架构方案,可根据不同的实际场景参考使用. 方案一 示例图如下: 说明: 每个日志源(http上报.日志文件等)对应一个Agent-c用于收集对 ...

  9. 从零开始学 Web 之 JS 高级(三)apply与call,bind,闭包和沙箱

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  10. 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

    如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案