Ocelot中文文档-Route
路由(Routing)
Ocelot主要功能是接收即将发来的请求并转发它们至下游服务。与此同时,以另一个http请求的形式(在将来这可能是任何传输的机制)
Ocelot将一个请求的路由描述为另一个路由ReRoute。为了在Ocelot能运行,你需要在配置中设置ReRoute。
{
"ReRoutes": [
]
}
为了设置ReRoute,你需要在ReRoute的json数组添加如下代码:
{
"DownstreamPathTemplate": "/api/posts/{postId}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 80,
}
],
"UpstreamPathTemplate": "/posts/{postId}",
"UpstreamHttpMethod": [ "Put", "Delete" ]
}
DownstreamPathTemplate
,Scheme
以及DownstreamHostAndPorts
会使该请求被转发到所示的URL。
DownstreamHostAndPorts
是一个数组,它包含端口号和主机,它代表任何你希望转发请求的下游服务。一般只包含一个实体,但是有时候你可能想要负载均衡多个请求到你的下游服务,Ocelot允许你添加一个或多个实体并指定一个负载均衡。
UpstreamPathTemplate
是一个URL,Ocelot会用它标示给定的请求使用 DownstreamPathTemplate
的值 。最后 UpstreamHttpMethod
是用来让Ocelot能够区分相同URL的请求,它明显需要工作。
你可以指定设置Http方法或者设置一个空的集合任意允许他们。Ocelot允许你为那些变量添加占位符到你的模板中以{something}的形式。DownstreamPathTemplate
和 UpstreamPathTemplate
都需要占位符。如果当请求到达时,Ocelot想企图从UpStream URL中的一个正确的变量值替换占位符。
你也可以像下面一样捕捉所有类型的ReRoute:
{
"DownstreamPathTemplate": "/api/{everything}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 80,
}
],
"UpstreamPathTemplate": "/{everything}",
"UpstreamHttpMethod": [ "Get", "Post" ]
}
这样将所有的路径+查询字符串结合在一起转发到下游服务在路径/api之后。
当没有任何配置的时候,Ocelot将默认所有的ReRoute是不区分大小写的。为了改变这个,你可以指定每一个ReRoute 按照下面设置。
"ReRouteIsCaseSensitive": true
这就表示Ocelot尝试匹配带着上游的模板的即将到达的上游请求,匹配时区分大小写。这个设置默认是false,如果你想让ReRoute是不区分大小写。
捕捉所有(Catch All)
Ocelot的路由支持在用户指定的那些想要匹配所有的事故的地方捕捉所有类型的路由,如果你要这么设置,那么就得在config里面像下面配置,那么将会直接通过请求代理(它不需要是URL,任何占位符名称都可以工作)。
{
"DownstreamPathTemplate": "/{url}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 80,
}
],
"UpstreamPathTemplate": "/{url}",
"UpstreamHttpMethod": [ "Get" ]
}
捕捉所有的路由的优先级要比任何其他路由都要低。如果你有一个像下面配置的ReRoute,那么Ocelot将会在捕捉所有路由之前捕捉它。
{
"DownstreamPathTemplate": "/",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "10.0.10.1",
"Port": 80,
}
],
"UpstreamPathTemplate": "/",
"UpstreamHttpMethod": [ "Get" ],
"UpstreamHost": "somedomain.com"
}
当主机头(host header)值是somedomain.com,只上面的ReRoute将会被匹配。
如果你在ReRoute上没设置UpstreamHost ,那么任何host header都能匹配它。这基本上是在构建特性时捕捉所有的路由和预服务器现有的功能。这意味着如果你有两个ReRoute,那么他们就与UpStreamHost相同,其中一个为null,另一个是已经设置的。Ocelot会喜欢那个已经被设置好的值。
这个特性是在Issue 216 被要求添加的。
优先级(Priority)
在 Issue 270 中我最后决定在ocelot.json文件暴露ReRoute优先级。这意味着你可以决定那些想在你的ReRoute中的顺序去匹配UpStream HttpRequest。
为了让这正常工作,需要像下面一样在ocelot.json添加一个属性到ReRoute,下面的0值在这里只是例子值。
{
"Priority": 0
}
0表示最低优先级,Ocelot总是为捕捉所有的路由 /{catch All} 使用0,并且是硬编码的。之后你可以设置任何你所有希望的优先级
比如你可以这样
{
"UpstreamPathTemplate": "/goods/{catchAll}"
"Priority": 0
}
以及
{
"UpstreamPathTemplate": "/goods/delete"
"Priority": 1
}
在上面的例子中,如果让一个请求/goods/delete 至Ocelot,那么它将匹配 /goods/delete 这个路由(ReRoute)。在以前,Ocelot是会捕捉所有 /goods/{catchAll} 的路由(因为在ReRoute中,它排在第一个)。
动态路由(Dynamic Routing)
这个特性是在 issue 340 被要求加上的。当使用服务发现提供器的时候这个能够动态选择路由,以便你无须提供ReRoute配置。如果你感兴趣的话,可以查看文档 service-discovery 。
Ocelot中文文档-Route的更多相关文章
- Ocelot中文文档入门
入门 Ocelot仅适用于.NET Core,目前是根据netstandard2.0构建的,如果Ocelot适合您,这个文档可能会有用. .NET Core 2.1 安装NuGet包 使用nuget安 ...
- Ocelot中文文档-跟踪
Ocelot使用一个杰出的项目Butterfly 提供了跟踪功能. 为了使用跟踪,请阅读Butterfly的文档. 在Ocelot中如果你想跟踪一个ReRoute,你需要做如下事情: 在Configu ...
- Ocelot中文文档-不支持
Ocelot不支持一下几点... 分块编码 - Ocelot将始终获取body大小并返回Content-Length头. 如果这不适合你的场景,只能表示抱歉! 转发host头 - 您发给Ocelot的 ...
- Ocelot中文文档-路由
Ocelot的主要功能是接管进入的http请求并把它们转发给下游服务.目前是以另一个http请求的形式(将来可能是任何传输机制). Ocelot将路由一个请求到另一个请求描述为ReRoute.为了在O ...
- Ocelot中文文档-管理
Ocelot支持在运行时通过一个认证的Http API修改配置.有两种方式对其验证, 使用Ocelot的内置IdentityServer(仅用于向管理API验证请求)或将管理API验证挂接到您自己的I ...
- Ocelot中文文档-Raft(实验功能不能用于生产环境)
Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现. 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能. Raft是一种分布式一致性 ...
- Ocelot中文文档-入门
Ocelot只能用于.NET Core,目前是为netcoreapp2.0构建的,这个文档可能会帮你了解Ocelot是否适合你. .NET Core 2.0 安装NuGet包 使用nuget安装Oce ...
- Ocelot中文文档-配置
这里有一个配置的列子.其中有两个配置块.一个ReRoutes数组和一个GlobalConfiguration.ReRoutes配置块是一些告诉Ocelot如何处理上游请求的对象.Globalconfi ...
- Ocelot中文文档-认证
为了验证ReRoutes并随后使用Ocelot的任何基于声明的功能,如授权或使用令牌中的值修改请求. 用户必须像往常一样在他们的Startup.cs中注册认证服务,但他们给每个注册提供了一个方案(认证 ...
随机推荐
- validatord的使用方法理解
今天是周日,自己已经在公司上班一周啦,可是这是我感觉最难熬 一周之一,上一次还是在高考失利的时候,自己整整一个月没有出去,在家里呆着,不知道干什么,这一此自己也是,感觉自己很难在这个公司熬下去,但是, ...
- .gitignore无效解决方案以及git rm和rm的区别
一. gitignore 先来了解一下gitignore的常用语法 斜杠“/”表示目录, 是否已斜杠开头有很大区别,如 /build 与 build/ 的区别:其中 build/ 表示不管在哪个位置的 ...
- 小程序快捷键(mac中)
快捷键 格式调整 - Ctrl+S:保存文件 - Ctrl+[, Ctrl+]:代码行缩进 - Ctrl+Shift+[, Ctrl+Shift+]:折叠打开代码块 - Ctrl+C Ctrl ...
- Merge Parts of Rar/7z Package in Linux
When file is too large, we will compress it and split it into several parts. Now Let me show you how ...
- android资源文件
代码与资源分离原则:便于维护与修改shape:定义图形 selector:按照不同的情况加载不同的color或drawable layer-list:从下往上图形层叠加载 资源文件有:/res/dra ...
- Jquery 图片走马灯效果原理
本篇只讲解水平走马灯效果,垂直向上走马灯效果不讲解,原理一样,但是水平走马灯效果有一个小坑.待会讲解 照例先上代码: HTML: <div class="box"> & ...
- springboot之使用redistemplate优雅地操作redis
概述 本文内容主要 关于spring-redis 关于redis的key设计 redis的基本数据结构 介绍redis与springboot的整合 sringboot中的redistemplate的使 ...
- word文档的python解析
主要两块,第一个是文件类型的转换,第二个是用docx包去对word文档中的table进行parse 1. 文件格式装换 因为很多各种各样的原因,至今还有一些word文档是doc的格式存的,对于这种,如 ...
- linux中ftp的安装过程记录[运维篇]
安装FTP的全过程记录,对于相同情况希望有所帮助.[centOS] 1.查询本机是否安装vsftpd: rpm -qa |grep vsftpd : 2.安装ftp服务 yum install vsf ...
- Shell-5--位置参数变量