Ocelot支持上游的请求限制,以便您的下游服务不会过载。 此功能是由GitHub上的@geffzhang添加! 非常感谢。
好了,为了让Route获得流量限制,你需要添加下面的json到Route中。
"RateLimitOptions": {
"ClientWhitelist": [],
"EnableRateLimiting": true,
"Period": "1s",
"PeriodTimespan": 1,
"Limit": 1
}
ClientWhitelist - 是一个包含客户端白名单列表的数组。这意味着在白名单里的客户端不受流量限制的影响。
EnableRateLimiting - 该值指定流量限制是否开启。
Period - 该值指定时间段,例如1s,5m,1h,1d等。
PeriodTimespan - 该值指定我们可以在一定的秒数后重试。
Limit - 该值指定一个客户端可以在定义的时间段(Period)内允许的最大请求数。
您还可以在ocelot.json的GlobalConfiguration部分中设置以下内容
"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源代码以查找更多信息。 如果有人要实现Redis,memcache等,我将不胜感激。
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的数字给ExceptionsAllowedBeforeBreaking。DurationOfBreak是断路器跳闸后保持断开的时间。TimeoutValue表示如果请求超过5秒钟,它将自动超时。
你可以单独设置TimeoutValue选项,而不设置ExceptionsAllowedBeforeBreaking 和DurationOfBreak 。
"QoSOptions": {
"TimeoutValue":5000
}
单独设置另外两个选项其中之一是没有意义的,因为他们两个相互影响。
如果您不添加QoS部分,QoS将不会被使用,但Ocelot默认将所有下游请求的超时时间设置为90秒。 如果有人需要这个90秒是可配置,请提出问题。
Ocelot微服务网关功能详解
本文详细介绍了Ocelot微服务网关的请求限制、缓存、服务质量(QoS)等功能,包括如何配置流量限制、使用CacheManager进行输出缓存及设置QoS参数,以确保下游服务稳定运行。
917

被折叠的 条评论
为什么被折叠?



