.NET Core API网关Ocelot(十二)【流量限制,缓存,Qos服务质量】

Ocelot支持上游的请求限制,以便您的下游服务不会过载。 此功能是由GitHub上的@geffzhang添加! 非常感谢。

好了,为了让Route获得流量限制,你需要添加下面的jsonRoute中。

"RateLimitOptions": {
    "ClientWhitelist": [],
    "EnableRateLimiting": true,
    "Period": "1s",
    "PeriodTimespan": 1,
    "Limit": 1
}

ClientWhitelist - 是一个包含客户端白名单列表的数组。这意味着在白名单里的客户端不受流量限制的影响。
EnableRateLimiting - 该值指定流量限制是否开启。
Period - 该值指定时间段,例如1s,5m,1h,1d等。
PeriodTimespan - 该值指定我们可以在一定的秒数后重试。
Limit - 该值指定一个客户端可以在定义的时间段(Period)内允许的最大请求数。

您还可以在ocelot.jsonGlobalConfiguration部分中设置以下内容

"RateLimitOptions": {
  "DisableRateLimitHeaders": false,
  "QuotaExceededMessage": "Customize Tips!",
  "HttpStatusCode": 999,
  "ClientIdHeader" : "Test"
}

DisableRateLimitHeaders - 该值指定是否禁用X-Rate-Limit和Rety-After头。
QuotaExceededMessage - 该值指定超出限制时返回的消息。
HttpStatusCode - 该值指定超出限制时返回的HTTP状态代码。
ClientIdHeader - 允许您指定应该用于标识客户端的头。 默认是“ClientId”


Caching

目前Ocelot使用CacheManager项目提供了一些非常基本的缓存。这是一个了不起的项目,它解决了很多缓存问题。 我会推荐这个软件包来做Ocelot缓存。

下面的示例演示如何将CacheManager添加到Ocelot,以便可以进行输出缓存。

首先添加以下NuGet包。

Install-Package Ocelot.Cache.CacheManager

这将使您可以访问Ocelot缓存管理器扩展方法。

第二件事,您需要对ConfigureServices执行以下操作。

s.AddOcelot()
    .AddCacheManager(x =>
    {
        x.WithDictionaryHandle();
    })

最后,为了在Route配置中的路由上使用缓存,请添加此设置。

"FileCacheOptions": { "TtlSeconds": 15, "Region": "somename" }

在此示例中,ttl seconds设置为15,这意味着缓存将在15秒后过期。

如果在此处查看示例,则可以看到如何设置缓存管理器,然后将其传递到Ocelot AddCacheManager配置方法中。 您可以使用CacheManager程序包支持的任何设置,然后直接传入。

无论如何,Ocelot当前支持在下游服务的URL上进行缓存,并以秒为单位设置TTL以使缓存过期。 您还可以通过调用Ocelot的管理API清除Region的缓存。

您自己的缓存

如果您想添加自己的缓存方法,请实现以下接口并将其注册到DI中,例如

services.AddSingleton<IOcelotCache<CachedResponse>, MyCache>()

IOcelotCache<CachedResponse> 这是用于输出缓存.

IOcelotCache<FileConfiguration> 如果您要远程调用某些内容以获取配置(例如Consul),则用于缓存文件配置。

请深入研究Ocelot源代码以查找更多信息。 如果有人要实现Redismemcache等,我将不胜感激。


Quality of Service

目前Ocelot支持一种QoS功能。 如果您希望在请求向下游服务时使用断路,则可以在Route中进行设置。 这个功能使用了一个名为Polly的.NET库,这个库很棒,在这里可以找到它。

如果要使用管理API,您需要做的第一件事就是引入相关的NuGet软件包。

Install-Package Ocelot.Provider.Polly

然后在你的ConfigureServices方法中

public virtual void ConfigureServices(IServiceCollection services)
{
    services
        .AddOcelot()
        .AddPolly();
}

添加如下配置块到一个Route配置中。

"QoSOptions": {
    "ExceptionsAllowedBeforeBreaking":3,
    "DurationOfBreak":5,
    "TimeoutValue":5000
}

为了实现这个规则,你必须设置一个大于0的数字给ExceptionsAllowedBeforeBreakingDurationOfBreak是断路器跳闸后保持断开的时间。TimeoutValue表示如果请求超过5秒钟,它将自动超时。

你可以单独设置TimeoutValue选项,而不设置ExceptionsAllowedBeforeBreakingDurationOfBreak

"QoSOptions": {
    "TimeoutValue":5000
}

单独设置另外两个选项其中之一是没有意义的,因为他们两个相互影响。

如果您不添加QoS部分,QoS将不会被使用,但Ocelot默认将所有下游请求的超时时间设置为90秒。 如果有人需要这个90秒是可配置,请提出问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值