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
我不建议这样做,我建议您创建自己的证书,然后如果可以的话,让本地/远程计算机信任它。
Ocelot(九)- 教你如何配置Ocelot?的更多相关文章
- [转载]Ocelot简易教程(一)Ocelot是什么
Ocelot简易教程(一)Ocelot是什么 简单的说Ocelot是一个用.NET Core实现并且开源的API网关技术. 可能你又要问了,什么是API网关技术呢?Ocelot又有什么特别呢?我们又该 ...
- solr与.net系列课程(九)solr5.1的配置
solr与.net系列课程(九)solr5.1的配置 最近一些园友来咨询solr5.1的配置方式,然后我就去官网下载了个最新版本的solr,发现solr5.0以后solr的下载包里的内容发生的变化,移 ...
- 结合IdentityServer4配置Ocelot的Json配置文件管理更新
Ocelot提供了AddAdministration方法来设置配置路由以及授权方式 services.AddOcelot().AddAdministration("/admin", ...
- 教你如何配置Ubuntu用于高效、高质量的发送邮件
本文首发在: http://mengxi.me/how-to-setup-ubuntu-sendmail-to-deliver-email-fast-and-reliable/ 在网站上线后,经常会遇 ...
- Spring学习记录(九)---通过工厂方法配置bean
1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...
- linux杂谈(十九):DNSserver的配置(二)
1.本机和外网的解析 之前讨论了DNS的正向解析和反向解析,但有的时候我们想让DNSserver对于server本机的解析和对于外网的解析是不同的.那就须要在主配置文件里对本机和外网进行不同的配 ...
- [学习笔记]Javaweb开发视频教程之Tomcat9配置
参考自北京动力节点的视频教程:https://www.bilibili.com/video/av14548279/?p=1 1.Java XE Java SE 是做电脑上运行的软件. Java EE ...
- 章节九、1-Selenium环境配置
一.Selenium环境安装配置,这里使用Selenium WebDriver 3.6.0 1.下载Selenium WebDriver (点击后网站响应比较慢,需要多等等) 2.打开该网址后点击“d ...
- SpringCloud系列九:SpringCloudConfig 基础配置(SpringCloudConfig 的基本概念、配置 SpringCloudConfig 服务端、抓取配置文件信息、客户端使用 SpringCloudConfig 进行配置、单仓库目录匹配、应用仓库自动选择、仓库匹配模式)
1.概念:SpringCloudConfig 基础配置 2.具体内容 通过名词就可以发现,SpringCloudConfig 核心作用一定就在于进行配置文件的管理上.也就是说为了更好的进行所有微服务的 ...
随机推荐
- Construct Binary Tree from Preorder and Inorder Traversal (DFS,参考)
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- 学习日常笔记<day16>mysql加强
1.数据约束 1.1什么是数据约束 对用户操作表的数据进行约束 1.2 默认值 作用:当永辉对使用默认值的字段不插入值的时候,就使用默认值 注意: 1)对默认值字段插入null是可以的 2)对默认值字 ...
- sublime text 3注册码
—– BEGIN LICENSE —– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 AFF6F6 ...
- 实时更新数据的jQuery图表插件DEMO演示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- git服务端安装
Windows平台下Git服务器搭建 第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 注意要下载是完整的JDK(其中有jre) 第二步:安装Java.安装步骤不 ...
- Java泛型的主要用途
1.泛型的主要用途就是代替各种类型,作为一个笼统的整体类型代替,也就是代替参数,不论是传入参数还是返回参数.都可以用泛型来代替. 如dao操作类的增删改查操作,因为传入参数的类型不同,但基本都是相同接 ...
- [转]图解eclipse 查看原始类出现The jar file rt.jar has no source attachment
原文:http://blog.csdn.net/u011514810/article/details/53196371 ---------------------------------------- ...
- 一个基于JBoss5.1+EJB3.0 登陆应用
花了几天的时间研究了一下EJB的使用,一直以来都主要是在写终端中的程序,对Java框架的相关的开发非常不熟悉,中间遇到了不少麻烦,还好总算都攻克了.写篇日志记录一下. 经验总结 为什么选择JBoss5 ...
- Office PDF如何旋转页面之后保存
直接视图-旋转视图-逆时针,是不行的,旋转之后无法保存,另存为之后也再打开也没有效果. 要点击视图-工具-页面 然后在右边的菜单中点击旋转,然后执行旋转,然后就可以保存了.
- Javascript将字符串日期格式化为yyyy-mm-dd的方法 js number 类型 没有length 属性 string类型才有
日期格式化相信对于大家来说再熟悉不过,最近工作中自己利用Javascript就写了一个,现在将实现的代码分享给大家,希望对有需要的朋友们能有所帮助,感兴趣的朋友们下面来一起看看吧. 这篇文章主要介绍的 ...