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作为键。
SSL错误
如果要忽略SSL警告/错误,请在ReRoute配置中设置以下内容。
"DangerousAcceptAnyServerCertificateValidator": true
我不建议这样做,我建议您创建自己的证书,然后如果可以的话,让本地/远程计算机信任它。
来源:.Net框架学苑 博客:https://www.cnblogs.com/letyouknowdotnet/ 本文版权归原作者和博客园共有,欢迎转载,但未经原作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究责任的权利。 |
我们学的不仅是框架,更是梦想!更多技术文章汇总,请查看www.letyouknow.net
|