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中注册认证服务,但他们给每个注册提供了一个方案(认证 ...
随机推荐
- IPC,Hz(Hertz) and Clock Speed
How do we measure a CPU's work? Whether it's fast or not depends on three factors: IPC, Hz, Clock sp ...
- bzoj4556(sam)
二分答案,(具体可见http://blog.csdn.net/neither_nor/article/details/51669114),然后就是判定问题,sa和sam都可以做,用sam写了一下,先用 ...
- zookeeper配置文件共享中心
最近频繁的系统上线,每次打包都要把配置文件替换为正式环境的配置文件,虽然说就是复制粘贴的事,架不住文件杂乱,而且多. 期初的想法是有没有办法将配置文件与系统隔离开来,这样在更新时候,就只需要更新代码部 ...
- 基于Docker+Jenkins+Gitlab搭建持续集成环境
随着DevOps理念和敏捷理念的发展,我们希望通过自动化技术,加快项目的迭代.尤其是当使用微服务方案后,面临在大量的项目构建和部署工作,借助于jenkins的持续集成,可以快速把应用打包成docker ...
- FFmpeg原始帧处理-滤镜API用法详解
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10429145.html 在FFmpeg中,滤镜(filter)处理的是未压缩的原始音视频 ...
- Python队列及在微信机器人中的应用
本文来源于i春秋学院,未经允许严禁转载. 最近打算更新微信机器人,发现机器人的作者将代码改进了很多,但去掉了sqlite数据库,需要自己根据需求设计数据库,跟作者沟通得到的建议是为了防止消息并发导致数 ...
- javaweb中的乱码问题
0.为什么需要编码,解码, 无论是图片,文档,声音,在网络IO,磁盘io中都是以字节流的方式存在及传递的,但是我们拿到字节流怎么解析呢?这句话就涉及了编码,解码两个过程,从字符数据转化为字节数据就是编 ...
- 第31节:Java基础-类与对象
前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载 ...
- 第一篇:服务的注册与发现Eureka(Finchley版本)
一.创建服务注册中心(Eureka) 1. 首先创建一个maven主工程 创建一个主Maven工程,在其pom文件引入依赖,spring Boot版本为2.0.3.RELEASE,Spring Clo ...
- Dispatch Queue 之内存中常驻的几个结构
_dispatch_main_q 也就是主要主队列,一定运行在主线程里. // 6618342 Contact the team that owns the Instrument DTrace pro ...