微服务学习总结5(Ocelot+Polly+Consul)

Ocelot缓存

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

微服务学习总结5(Ocelot+Polly+Consul)_第1张图片

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

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

在10秒钟之内请求网关地址,返回的是同一个内容:

微服务学习总结5(Ocelot+Polly+Consul)_第2张图片

 

Ocelot限流

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

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

微服务学习总结5(Ocelot+Polly+Consul)_第3张图片

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

RateLimitOptions配置项对请求的次数和时长做具体限制。

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

 

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

微服务学习总结5(Ocelot+Polly+Consul)_第4张图片

 

Ocelot熔断

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

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

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

微服务学习总结5(Ocelot+Polly+Consul)_第5张图片

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

用一句话描述上述配置:对http://localhost:9526/ApiService/values/Timeout请求超过1s将会超时,发生三次超时后保持60s熔断。

 

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

微服务学习总结5(Ocelot+Polly+Consul)_第6张图片

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

微服务学习总结5(Ocelot+Polly+Consul)_第7张图片

 

微服务学习总结5(Ocelot+Polly+Consul)_第8张图片

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

微服务学习总结5(Ocelot+Polly+Consul)_第9张图片

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

 

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

微服务学习总结5(Ocelot+Polly+Consul)_第10张图片

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

 

你可能感兴趣的:(ASP.NET,c#,微服务,ocelot,网关,缓存,限流,熔断)