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

19 篇文章 0 订阅
6 篇文章 0 订阅

Ocelot缓存

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

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

"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 //自定义返回内容
    }
  }

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

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

 

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

 

Ocelot熔断

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

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

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

      //熔断:达成某些条件后,接口暂不提供服务
      "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 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值