简介

  .net core使用ocelot---第一篇 简单使用

  .net core使用ocelot---第二篇 身份验证

  .net core使用ocelot---第三篇 日志记录

前几篇文章我们陆续介绍如何用ASP.NET Core 创建API网关。

这次我们讨论Ocelot的流量限制模块。

什么是流量控制(Rate Limiting)高端词 限流熔断

维基百科定义流量控制是网络接口控制器限制发送接收的流量以防止DoS攻击。

多数APIs每秒(每份,或者其他短时间周期)被调用的次数是被限制的,以便保护服务以免过载或者为多数客户端提供高质量的服务。

现在我们看看Ocelot是如何实现速度限制的。

这里我用Ocelot 3.1.5创建一个示例。

准备

我们创建两个项目并保证能运行。

和往常一样,先创建两个项目。

项目名称

项目类型

描述

APIGateway

ASP.NET Core Empty

示例的入口

APIServices

ASP.NET Core Web API

API服务提供一些服务

给APIGateway项目添加基本configuration.json文件

  1. {
  2. "ReRoutes": [
  3. {
  4. "DownstreamPathTemplate": "/api/values",
  5. "DownstreamScheme": "http",
  6. "DownstreamHostAndPorts": [
  7. {
  8. "Host": "localhost",
  9. "Port":
  10. }
  11. ],
  12. "UpstreamPathTemplate": "/customers",
  13. "UpstreamHttpMethod": [ "Get" ]
  14. },
  15. {
  16. "DownstreamPathTemplate": "/api/values/{id}",
  17. "DownstreamScheme": "http",
  18. "DownstreamHostAndPorts": [
  19. {
  20. "Host": "localhost",
  21. "Port":
  22. }
  23. ],
  24. "UpstreamPathTemplate": "/customers/{id}",
  25. "UpstreamHttpMethod": [ "Get" ]
  26. }
  27. ],
  28. "GlobalConfiguration": {
  29. "RequestIdKey": "OcRequestId",
  30. "AdministrationPath": "/administration"
  31. }
  32. }

注意

  需要注意节点DownstreamHostAndPorts,之前的Ocelot版本,该节点被DownstreamHost和DownstreamPort替代。

启动这两个项目,你会看到下面的结果。

  我们的准备工作完成了,接下来我们对http://localhost:9000/customers配置流量限制。

在configuration.json添加流量限制

我们只需要添加RateLimitOptions节点。如下的配置。

  1. {
  2. "DownstreamPathTemplate": "/api/values",
  3. "DownstreamScheme": "http",
  4. "DownstreamHostAndPorts": [
  5. {
  6. "Host": "localhost",
  7. "Port":
  8. }
  9. ],
  10. "UpstreamPathTemplate": "/customers",
  11. "UpstreamHttpMethod": [ "Get" ],
  12. "RateLimitOptions": {
  13. "ClientWhitelist": [],
  14. "EnableRateLimiting": true,
  15. "Period": "1s",
  16. "PeriodTimespan": ,
  17. "Limit":
  18. }
  19. }
  20. //others.....

  好了。启动项目看看流量限制效果。

  我们可以看见,API请求超出配额,1秒只允许请求1次。当我们的请求在1秒中超过一次。你可以看到下图的情况。

  返回状态码为429(请求太多),在返回头(Response Header)包含Retry-After属性,这个属性意味我们1秒后再尝试请求。

更多配置

在上面我们已经实现了速度限制。

可能你会有下面的疑问。

  1. 我们可以替换默认的提示吗?(超过限制返回的提示)
  2. 我们能移除返回头的流量限制标记吗?
  3. 我们能修改超限的返回状态码吗?

  当然可以。

  只需要添加一些全局配置即可。

  1. "GlobalConfiguration": {
  2. "RequestIdKey": "OcRequestId",
  3. "AdministrationPath": "/administration",
  4. "RateLimitOptions": {
  5. "DisableRateLimitHeaders": false,
  6. "QuotaExceededMessage": "Customize Tips!",
  7. "HttpStatusCode":
  8. }
  9. }

  我们具体介绍一下GlobalConfiguration的RateLimitOptions节点。

  1. DisableRateLimitHeaders:是否显示X-Rate-Limit和Retry-After头
  2. QuotaExceededMessage:超限提示信息
  3. HttpStatusCode:当流量限制后返回的状态码

  添加上面的配置以后,我们看下图的效果。

  源码在此

  网盘链接:https://pan.baidu.com/s/17sqfGcYx8yEHRL_LwKAUlA
  提取码:p3d0

总结

Null

.net core使用ocelot---第四篇 限流熔断的更多相关文章

  1. .Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换

    1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API ...

  2. .Net微服务实践(四)[网关]:Ocelot限流熔断、缓存以及负载均衡

    目录 限流 熔断 缓存 Header转化 HTTP方法转换 负载均衡 注入/重写中间件 后台管理 最后 在上篇.Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合中我们介绍了Ocelot的 ...

  3. .Net Core的API网关Ocelot的使用(二)[负载,限流,熔断,Header转换]

    网关的负载均衡 当下游拥有多个节点的时候,我们可以用DownstreamHostAndPorts来配置 { "UpstreamPathTemplate": "/Api_A ...

  4. ASP.NET Core中使用漏桶算法限流

    漏桶算法是限流的四大主流算法之一,其应用场景各种资料中介绍的不多,一般都是说应用在网络流量控制中.这里举两个例子: 1.目前家庭上网都会限制一个固定的带宽,比如100M.200M等,一栋楼有很多的用户 ...

  5. Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Ocelot+Polly缓存、限流、熔断、降级

    相关文章 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网 ...

  6. Hystrix介绍以及服务的降级限流熔断

    (dubbo熔断,Hystrix问的少) 无论是缓存层还是存储层都会有出错的概率,可以将它们视同为资源.作为并发量较大的系统,假如有一个资源不可用,可能会造成线程全部 hang (挂起)在这个资源上, ...

  7. springBoot整合Sentinel实现降级限流熔断

    由于hystrix的停止更新,以及阿里Sentinel在历年双十一的贡献.项目中使用了Sentinel,今天我们来讲讲Sentinel的入门教程,本文使用1.6.3版本进行讲解 本文通过Sentine ...

  8. DBPack 限流熔断功能发布说明

    上周我们发布了 v0.4.0 版本,增加了限流熔断功能,现对这两个功能做如下说明. 限流 DBPack 限流熔断功能通过 filter 实现.要设置限流规则,首先要定义 RateLimitFilter ...

  9. Spring Cloud alibaba网关 sentinel zuul 四 限流熔断

    spring cloud alibaba 集成了 他内部开源的 Sentinel 熔断限流框架 Sentinel 介绍 官方网址 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentine ...

随机推荐

  1. [SNOI2019]纸牌

    传送门 Description 有一副纸牌.牌一共有\(n\)种,分别标有 \(1,2,...,n\),每种有\(C\)张.故这副牌共有\(nC\)张. 三张连号的牌(\(i,i+1,i+2\))或三 ...

  2. SpringBoot:关于默认连接池Hikari的源码剖析

    1.起因 因为这两天在给公司的一个项目升级SpringBoot版本,遇到了一些坑,升级项目版本:SpringBoot1.5.x到SpringBoot2.0.x 今天早上双库操作遇到一个问题:jdbcU ...

  3. 通过phoenix导入数据到hbase出错记录

    解决方法1 错误如下 -- ::, [hconnection-0x7b9e01aa-shared--pool11069-t114734] WARN org.apache.hadoop.hbase.ip ...

  4. Kafka(四) —— KafkaProducer源码阅读

    一.doSend()方法 Kafka中的每一条消息都对应一个ProducerRecord对象. public class ProducerRecord<K, V> { private fi ...

  5. Redis代码示例

    RedisTemplate 如果想要在java中使用Redis相关的数据结构,要先注入RedisTemplate. @Autowired private RedisTemplate<K,V> ...

  6. Systemback制作大于4G的Ubuntu系统镜像

    1 安装Systemback 依此执行如下命令. sudo apt-get update sudo add-apt-repository ppa:nemh/systemback sudo apt-ge ...

  7. Mxnet:以全连接层为例子自定义新的操作(层)

    https://blog.csdn.net/a350203223/article/details/77449630 在使用深度学习平台时,光会使用其中已定义好的操作有时候是满足不了实际使用的,一般需要 ...

  8. [Java复习] Spring Cloud - Netflix

    Spring Cloud Netflix常用组件 服务注册与发现:Eureka 服务负载均衡:Ribbon 服务声明式客户端:Feign 服务熔断:Hystrix 服务网关: Zuul Eureka: ...

  9. [简短问答]LODOP打印不清晰

    用什么语句输出的:使用的的是什么语句输出的,是ADD_PRINT_TEXT纯文本,还是html的超文本. 超文本不清晰:如果用的是ADD_PRINT_HTML ,换成 ADD_PRINT_HTM试试, ...

  10. [LeetCode] 68. Text Justification 文本对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...