原文

这里有一个配置的样例。配置主要有两个部分。一个是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

[译]Ocelot - Configuration的更多相关文章

  1. [译]Ocelot - Getting Started

    原文 Ocelot专为.NET Core而设计. .NET Core 2.1 安装 首先需要创建一个netstandard2.0项目,然后再通过nuget安装. Install-Package Oce ...

  2. [译]Ocelot - Big Picture

    原文 目录 Big Picture Getting Started Configuration Routing Request Aggregation Service Discovery Authen ...

  3. [译]Ocelot - Load Balancer

    原文 可以对下游的服务进行负载均衡. 提供了下面几种负载均衡: LeastConnection - tracks which services are dealing with requests an ...

  4. [译]Ocelot - Quality of Service

    原文 可以针对每个ReRoute设置对下游服务的熔断器circuit breaker.这部分是通过Polly实现的. 将下面的配置添加到一个ReRoute下面去. "QoSOptions&q ...

  5. [译]Ocelot - Caching

    原文 Ocelot支持基本的缓存,目前Ocelot的缓存是通过CacheManager project实现的. 下面的示例展示了如何启用缓存: s.AddOcelot() .AddCacheManag ...

  6. [译]Ocelot - Rate Limiting

    原文 Ocelot支持对上游做访问限流,这样就可以保证下游不要负载太大了. 如果要启用访问限流,需要做如下配置: "RateLimitOptions": { "Clien ...

  7. [译]Ocelot - Service Discovery

    原文 你可以指定一个service discovery provider,ocelot将使用它来找下游的host和port. Consul 下面的配置要放在GlobalConfiguration中.如 ...

  8. [译]Ocelot - Request Aggregation

    原文 Aggregate ReRoutes用来组合多个ReRoutes,将它们的响应结果映射到一个响应中返回给客户端. 为了使用Aggregate ReRoutes,你必须像下面的ocelot.jso ...

  9. [译]Ocelot - Routing

    原文 Ocelot主要的功能就是将http请求转发到对应的下游服务上去. Ocelot将一个请求路由到另外一个路由的动作叫做ReRoute.为了能让Ocelot能正常工作,需要在配置中设置ReRout ...

随机推荐

  1. tmpfs使用探讨

    一. 什么是tmpfs? tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储. 而且 ...

  2. [LeetCode] 15. 三数之和

    题目链接:https://leetcode-cn.com/problems/3sum/ 题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a ...

  3. Redtiger SQL注入练习(一)

    感觉会的东西太少了,以后要多练习,多写博客.要坚持学习,一定不能放弃,为梦想奋斗. redtiger  这个平台早就开始做了,但是才做到第4关.... 第一关: 打开题, 先随便试,后来发现点击 Ca ...

  4. P1273 有线电视网

    题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...

  5. 《通过C#学Proto.Actor模型》之Behaviors

    Behaviors就是Actor接收到消息后可以改变处理的方法,相同的Actor,每次调用,转到不同的Actor内方法执行,非常适合按流程进行的场景.Behaviors就通过在Actor内部实例化一个 ...

  6. 以springMVC为例获取上传视频文件时长

    毕设项目是一个在线学习系统,教师用户有上传视频的功能,在答辩之前赶了一个demo出来,好多功能都写死了,比如课程学习进度就是被我写死在前端的一个变量,最近导师要我把项目打包发给他,这才心慌慌赶紧把这些 ...

  7. TensorRT&Sample&Python[end_to_end_tensorflow_mnist]

    本文是基于TensorRT 5.0.2基础上,关于其内部的end_to_end_tensorflow_mnist例子的分析和介绍. 1 引言 假设当前路径为: TensorRT-5.0.2.6/sam ...

  8. CentOS7.5脱机安装SQL Server 2017(NEW)

    发现搜到的都是在线下载安装的,都是只安装了mssql-server服务,没有mssql-server-agent服务.还以为linux下mssql没有agent服务呢.一番测试发现可以脱机安装,但是能 ...

  9. svn 钩子应用 - svn 提交字符限制, 不能为空

    一.版本库钩子 1.1 start-commit  开始提交的通知 输入参数:传递给你钩子程序的命令行参数,顺序如下: 1.  版本库路径 2.  认证过的尝试提交的用户名 3.  Depth,mer ...

  10. python scapy dns 包字段解析

    qr:   0表示查询报文,1表示响应报文opcode: 通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求).aa: 表示授权回答(authoritative answer)tc: ...