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中注册认证服务,但他们给每个注册提供了一个方案(认证 ...
随机推荐
- SOPC与 hello world
本次设计实验源码位于:http://download.csdn.net/detail/noticeable/9922865 实验目的:通过系统的搭建进一步了解FPGA的SOPC开发流程,并借此了姐pl ...
- HSmartWindowControl之安装篇 (Visual Studio 2013 & Halcon 18)
1.环境简介 Visual Studio 2013社区版 Halcon18.05 2.使用Nuget在VS工程中安装Halcon插件 搜索栏输入关键字halcon,出现两个插件,分别是halcon语言 ...
- 调用redis的时候二维码不断刷新的排查
一.背景和现象. 项目是PHP开发的,点击登录的时候就根据随机数生成了二维码,缓存在了redis.用户用微信扫描了二维码分析出需要请求的链接,然后微信浏览器就请求了服务器,服务器通过了随机数认证.正当 ...
- MySQL 数据类型说明解释
在 MySQL 中,有三种主要的类型:Text(文本).Number(数字)和 Date/Time(日期/时间)类型. Text 类型: 数据类型 描述 CHAR(size) 保存固定长度的字符串(可 ...
- 使用Lucene-Spatial实现集成地理位置的全文检索
Lucene通过Spatial包提供了对基于地理位置的全文检索的支持,最典型的应用场景就是:“搜索中关村附近1公里内的火锅店,并按远近排序”.使用Lucene-Spatial添加对地理位置的支持,和之 ...
- Ubuntu 16.04 安装 arm-linux-gcc 交叉编译工具
工作需要,最近在编译linux嵌入式内核时,需要安装arm-linux-gcc交叉编译,实际上,安装这个交叉编译器的难度没啥.不过,这里有些问题还是值得我去思考和记录下来的. 这个系统的上的编译器用的 ...
- Mobility Model and Routing Model about the ONE
ONE主要的功能是节点的移动,节点间的相遇情况,路由情况以及消息的处理机制.下面简要介绍下目前ONE自带的六种移动模型和六种路由模型. Mobility Model: 从大的方面,可以分为三种,1)随 ...
- Spring Boot Starters启动器
Starters是什么? Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包.如你想使用Spring J ...
- Java RMI 概观
RMI是Java的一组拥护开发分布式应用程序的API. RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol) ...
- Java学习之Servlet篇
<JAVA遇见HTML——Servlet篇> Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命 ...