.Net Core的API网关Ocelot的使用(二)[负载,限流,熔断,Header转换]
2021-01-25 15:14
标签:form 跟踪 stand 移除 pre 允许 round 认证 base 当下游拥有多个节点的时候,我们可以用DownstreamHostAndPorts来配置 限流可以防止上下游服务器因为过载而崩溃,可以使用RateLimitOptions来配置限流 超过限流后会返回429状态码,并在在返回头(Response Header)的Retry-After属性中返回等待重置时间。 熔断是在下游服务故障或者请求无响应的时候停止将请求转发到下游服务。 Ocelot可以对下游请求结果进行缓存,主要是依赖于CacheManager来实现的。 Ocelot允许在请求下游服务之前和之后转换Header.目前Ocelot只支持查找和替换. 如果们需要转发给下游的Header重添加一个key/value 如果们需要在返回给客户端的的Header中添加一个key/value 如果我们需要替换Heaher中某些值 语法是{find},{replace}, 利用b取代a 在Header转换中可以使用占位符 如果您想将location头返回给客户端,可能需要将location更改为Ocelot的地址而不是下游服务地址。 Ocelot可以使用以下配置实现。 给Header中添加下游地址 响应的Header中已经替换成BaseUrl了 简单的配置了Ocelot的负载,限流,熔断,Header转换。具体配置还需要结合业务去搭配。下一次会给Ocelot集成Identity认证,鉴权。 .Net Core的API网关Ocelot的使用(二)[负载,限流,熔断,Header转换] 标签:form 跟踪 stand 移除 pre 允许 round 认证 base 原文地址:https://www.cnblogs.com/stutlh/p/12011866.html网关的负载均衡
{
"UpstreamPathTemplate": "/Api_A/{controller}/{action}",
"DownstreamPathTemplate": "/api/{controller}/{action}",
"DownstreamScheme": "https",
"LoadBalancer": "LeastConnection",
"UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ],
"DownstreamHostAndPorts": [
{
"Host": "127.0.0.1",
"Port": 5001,
},
{
"Host": "127.00.1",
"Port": 5002,
}
],
}
LoadBalancer是来决定负载的算法
限流
{
"RateLimitOptions": {
"ClientWhitelist": [“127.0.0.1”],
"EnableRateLimiting": true,
"Period": "5s",
"PeriodTimespan": 1,
"Limit": 10
}
}
对于除了请求头中ClientId=127.0.0.1的意外所有求情启用限流,5秒该api最多10次,如果达到10次需要从第10次请求闭合后等待一秒进行下一次访问。
限流的默认提示,code码,和限制标志都是可以自己配置的 {
"GlobalConfiguration": {
"BaseUrl":"www.baidu.com",
"RateLimitOptions": {
"DisableRateLimitHeaders": false,
"QuotaExceededMessage": "接口限流!",
"HttpStatusCode": 200,
"ClientIdHeader": "ClientId"
}
}
熔断
{
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 3,
"DurationOfBreak": 20,
"TimeoutValue": 5000
}
}
缓存
{
"FileCacheOptions": {
"TtlSeconds": 60,
"Region": "key"
}
}
我们可以调用Ocelot的API来移除某个区下面的缓存 。请求头的转化
{
"UpstreamHeaderTransform": {
"demo": "xxxxxxx"
}
}
{
"DownstreamHeaderTransform": {
"demo": "xxxxxxx"
}
}
{
//请求
"UpstreamHeaderTransform": {
"demo": "a,b"
},
//响应
"DownstreamHeaderTransform":
{
"demo": "a,b"
}
}
{
"DownstreamHeaderTransform": {
"Location": "{DownstreamBaseUrl},{BaseUrl}"
},
}
总结
文章标题:.Net Core的API网关Ocelot的使用(二)[负载,限流,熔断,Header转换]
文章链接:http://soscw.com/essay/46850.html