文档地址:
https://ocelot.readthedocs.io/en/latest/features/caching.html
个人感觉 把请求的缓存放到网关里吧 实际用处非常少 但是先记录一下吧
其他的不变(见上一二三篇)
https://blog.csdn.net/baidu_38845827/article/details/113586679(基础篇)
https://blog.csdn.net/baidu_38845827/article/details/113594621(整合Consul)
https://blog.csdn.net/baidu_38845827/article/details/113608854(限流)
这个Ocelot的使用基本都是三步 所以咱给它起个名字 叫三步走战略
第一步:添加dll Ocelot.Cache.CacheManager
第二步:ConfigureService方法里添加如下代码
services.AddOcelot().AddCacheManager(x =>
{
x.WithDictionaryHandle();
})
这里有个点 就是vs不能提示然后点引入那个命名空间 需要手动加
using Ocelot.Cache.CacheManager;
第三步: 在ocelot.json文件里添加如下配置即可
"FileCacheOptions": {
"TtlSeconds": 10, //缓存过期时间
"Region": "hotel_api" //作用范围 和ServiceName对应
}
具体的看我的配置 我的配置里有整合Consul和限流的配置
{
"ReRoutes": [
{
"UseServiceDiscovery": true,
"DownstreamPathTemplate": "/{url}",
"DownstreamScheme": "http",
//"DownstreamHostAndPorts": [
// {
// "Host": "localhost",
// "Port": 59607
// }
//],
"UpstreamPathTemplate": "/{url}",
"UpstreamHttpMethod": [ "GET", "POST" ],
"LoadBalancerOptions": {
"Type": "RoundRobin"
},
"ServiceName": "hotel_api",
"RateLimitOptions": {
//"ClientWhitelist": [ ], //白名单里的客户端 请求不进行限流
"EnableRateLimiting": true, //开启限流
"Period": "1s",
"PeriodTimespan": 1, // 被限制了5s 后 可以再请求
"Limit": 10 //1s内 最多访问 1 次
},
"FileCacheOptions": {
"TtlSeconds": 10,
"Region": "hotel_api"
}
}
],
"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Scheme": "http",
"Host": "localhost",
"Port": 8500,
"Type": "Consul"
},
"RateLimitOptions": {
"DisableRateLimitHeaders": false,
"QuotaExceededMessage": "To many ya", //被限制后的提示语
"HttpStatusCode": 999 //被限制后的 返回的状态码
}
}
}
经测试 没问题
这个还可以进行自定义扩展 具体的看文档
完工