Ocelot的合并方式是先对满足格式的文件遍历查找,然后循环加载他们,并提取所有的ReRoutes以及AggregateReRoutes 的数据。如果发现ocelot.global.json ,则添加到GlobalConfiguration 中。然后Ocelto会将合并后的配置保存在ocelot.json的文件中,当Ocelot运行时会加载这个合并后的ocelot.json文件,从而加载了所有的配置。
注意:这里需要注意的是Ocelot在合并的过程中不会对内容进行验证,只有在最终合并的配置进行校验,所以如果发现问题的话,那么你需要检查最终生成的ocelot.json 是否出错了!
在consul中存储配置这里你首先要做的就是安装Ocelot中提供的Consul的NuGet包,Nuget安装方式:
Install-Package Ocelot.Provider.Consul
然后在注册服务时添加如下内容:Ocelot将会尝试在Consul KV存储并加载配置。
services .AddOcelot() .AddConsul() .AddConfigStoredInConsul();当然你还得把下面的配置添加到你的ocelot.json文件中。这里定义Ocelot如何查找Consul根并从Consul中加载并存储配置.
"GlobalConfiguration": { "ServiceDiscoveryProvider": { "Host": "localhost", "Port": 9500 } } 变化时重新加载配置文件Ocelot支持在配置文件发生改变的时候重新加载json配置文件。在加载ocelot.json文件的时候按照下面进行配置,那么当你手动更新ocelot.json文件时,Ocelot将重新加载ocelot.json配置文件。
config.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
配置Key如果你使用Consul进行配置,你可能需要配置Key以便区分多个配置,为了指定Key,你需要在json配置文件中的ServiceDiscoveryProvider部分设置ConfigurationKey属性:
"GlobalConfiguration": { "ServiceDiscoveryProvider": { "Host": "localhost", "Port": 9500, "ConfigurationKey": "Oceolot_A" } }在此实例中,Ocelot将会在Consul查找时使用Oceolot_A 作为配置的Key.如果没有设置ConfigurationKey 则Ocelot将使用字符串InternalConfiguration 作为此配置的Key
跟踪重定向和使用CookieContainer在ReRoute配置中可以使用HttpHandlerOptions来设置HttpHandler行为:
AllowAutoRedirect是一个值,指示请求是否应遵循重定向响应。如果请求应自动遵循来自下游资源的重定向响应,则将其设置为true; 否则是假的。默认值为false。
UseCookieContainer是一个值,指示处理程序是否使用CookieContainer属性存储服务器cookie并在发送请求时使用这些cookie。默认值为false。请注意,如果您使CookieContainer,则Ocelot会为每个下游服务缓存HttpClient。这意味着对该DownstreamService的所有请求将共享相同的cookie。
SSL 错误处理如果你想忽略SSL 警告/错误,你可以在你的ReRoute 配置中加上如下配置:
"DangerousAcceptAnyServerCertificateValidator": false当然作者是不建议这样做的,最好的方式是创建你本地以及远程所信任的证书。
Ocelot路由详解 路由Ocelot的最主要的功能是接收传入的http请求并将其转发到下游服务。
Ocelot使用ReRoute节点描述将一个请求路由到另一个请求。为了让路由在Ocelot中起作用,您需要在配置中设置ReRoute:
{ "ReRoutes": [ ] }要配置ReRoute,您需要在ReRoutes json数组中至少添加一个:
{ "DownstreamPathTemplate": "/api/good/{goodId}",//下游路由模板 "DownstreamScheme": "http",//下游路由请求的方式 "DownstreamHostAndPorts": [//下游路由的Host以及端口 { "Host": "localhost", "Port": 1001, } ], "UpstreamPathTemplate": "/good/{goodId}",//上游路由请求的模板 "UpstreamHttpMethod": [ "Put", "Delete" ]//上游路由请求的方式 }DownstreamPathTemplate,DownstreamScheme和DownstreamHostAndPorts定义请求将转发到的URL。
DownstreamHostAndPorts是一个集合,用于定义您希望将请求转发到的任何下游服务的主机和端口。通常这只包含一个条目,但有时你希望对下游请求服务进行负载均衡,这个时候你就可以添加多个条目,并配合负载均衡选项进行相关的负载均衡设置。
UpstreamPathTemplate是Ocelot用于标识要用于给定请求的DownstreamPathTemplate对应的URL。使用UpstreamHttpMethod以便Ocelot可以区分具有不同HTTP谓词的请求到相同的URL。您可以设置特定的HTTP方法列表,也可以设置一个空列表以允许所有的。