成都网站建设设计

将想法与焦点和您一起共享

微服务-Ocelot熔断-创新互联

Ocelot缓存
网关除了可以做请求转发外,还可以做缓存功能。

专注于为中小企业提供网站建设、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业沈北新免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

 

在网关服务的自定配置文件configuration.json中添加缓存配置节点,就可以实现将相同请求在一定时间内返回同一内容,网关直接将后面的请求拦截并处理,请求不会被转发到consul。

"FileCacheOptions": { //缓存设置   "TtlSeconds": 10, //ttl秒被设置为10,这意味着缓存将在10秒后过期。(同一地址就返回同一结果)   "Region": "" //缓存region ,可以使用administrator API清除}

"FileCacheOptions": { //缓存设置
"TtlSeconds": 10, //ttl秒被设置为10,这意味着缓存将在10秒后过期。(同一地址就返回同一结果)
"Region": "" //缓存region ,可以使用administrator API清除
}
在10秒钟之内请求网关地址,返回的是同一个内容:

 

Ocelot限流

限制请求在1分钟只能最多请求5次,超过5次则不可请求。5秒钟过后可继续请求。要完成这样一个需求,需要用到网关的限流机制。

配置文件configuration.json中添加限流配置节点:

 

//限流:限制单位时间内请求数量(防爬虫,防ddos等) "RateLimitOptions": {
"ClientWhitelist": [], // 白名单   "EnableRateLimiting": true, // 是否限流   "Period": "1m", // 1s,4m,1h,1d   "PeriodTimespan": 5, // 多少秒之后客户端可以重试   "Limit": 5 // 一个时间周期最多可以请求的次数      }
"GlobalConfiguration": {
"RateLimitOptions": { //超过限流 "HttpStatusCode": 999 //自定义返回内容    }
  }

//限流:限制单位时间内请求数量(防爬虫,防ddos等)
"RateLimitOptions": {
"ClientWhitelist": [], // 白名单
"EnableRateLimiting": true, // 是否限流
"Period": "1m", // 1s,4m,1h,1d
"PeriodTimespan": 5, // 多少秒之后客户端可以重试
"Limit": 5 // 一个时间周期最多可以请求的次数
}
"GlobalConfiguration": {
"RateLimitOptions": { //超过限流
"HttpStatusCode": 999 //自定义返回内容
}
}
RateLimitOptions配置项对请求的次数和时长做具体限制。

RateLimitOptions配置项对限流后返回内容做设置,比如自定义状态码,用999来表示已超过大访问限流值。

一分钟之内请求超过5次,会返回如下信息:

 

Ocelot熔断

请求在5秒钟之内没有返回内容,那么本次请求就算超时。要完成这样一个需求,需要用到网关的熔断机制。

使用NuGet在网关项目中引用程序集:Ocelot.Provider.Polly

 

配置文件configuration.json中添加熔断配置节点:

 

//熔断:达成某些条件后,接口暂不提供服务 "QoSOptions": { //断路器配置,目前Ocelot使用的Polly   "ExceptionsAllowedBeforeBreaking": 3, //打开断路器之前允许的例外数量。(允许多少个异常请求)   "DurationOfBreak": 60000, //断路器复位之前,打开的时间(毫秒)(熔断时间6秒钟)   "TimeoutValue": 1000 //请求超时时间(毫秒)      }

//熔断:达成某些条件后,接口暂不提供服务
"QoSOptions": { //断路器配置,目前Ocelot使用的Polly
"ExceptionsAllowedBeforeBreaking": 3, //打开断路器之前允许的例外数量。(允许多少个异常请求)
"DurationOfBreak": 60000, //断路器复位之前,打开的时间(毫秒)(熔断时间6秒钟)
"TimeoutValue": 1000 //请求超时时间(毫秒)
}
用一句话描述上述配置:对http://localhost:9526/ApiService/values/Timeout请求超过1s将会超时,发生三次超时后保持60s熔断。

要检查熔断机制有没有生效,在webapi的控制器中加一个方法:

让线程休息6秒钟。以达到超过配置项中1秒超时的目的。

 

 

从浏览器看这个请求返回503,代表请求被服务器拒绝访问。实际已经执行了,从log可以看出:

 

因为配置了熔断策略,所以这个超过1秒钟的请求被网关认为是超时请求。

可以看到在前4次请求,Time在1000ms之后返回503,在第四次以后发生熔断,请求后立即(Time在100ms左右)返回503。

 

参考文章:https://www.jianshu.com/p/c7f5f9515962


分享文章:微服务-Ocelot熔断-创新互联
文章链接:http://chengdu.cdxwcx.cn/article/shpcs.html