请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

【Part 4】在ASP.NET Core中使用Ocelot构建API网关 - Rate Limiting

[复制链接]
查看: 27|回复: 0

2万

主题

2万

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
76547
发表于 2020-9-16 11:34 | 显示全部楼层 |阅读模式
Introduction
回顾这一系列文章,我们讨论了如何用ASP.NET Core构建API网关。
在这篇文章中,我们将讨论Ocelot的路由限制模板。
如果你想看系列文章,请访问以下链接:
What is Rate Limiting?
Wikipedia告诉我们,路由限制用于控制网络接口控制器发送或接收的流量速率,并用于防止DoS攻击。
大多数api都受到每秒(或一分钟,或另一个较短的时间段)可以进行多少次调用的限制,以保护服务器不受过载的影响,并为许多客户端维护高质量的服务。
现在,让我们看看如何使用Ocelot去实现路由限制。
我们将使用Ocelot的3.1.5版本去创建示例。

Preparation
我们需要创建两个项目,并确保它们能够正常运行。
像往常一样,首先创建两个项目:
Project NameProject TypeDescription
APIGatewayASP.NET Core EmptyThis is the entry of this demo.
APIServicesASP.NET Core Web APIThis is an API Service that provides some services.
添加基本configuration.json文件到APIGateway项目。

  • {
  •     "ReRoutes": [
  •         {
  •             "DownstreamPathTemplate": "/api/values",
  •             "DownstreamScheme": "http",
  •             "DownstreamHostAndPorts": [
  •                 {
  •                     "Host": "localhost",
  •                     "Port": 9001
  •                 }
  •             ],
  •             "UpstreamPathTemplate": "/customers",
  •             "UpstreamHttpMethod": [ "Get" ]
  •         },
  •         {
  •             "DownstreamPathTemplate": "/api/values/{id}",
  •             "DownstreamScheme": "http",
  •             "DownstreamHostAndPorts": [
  •                 {
  •                     "Host": "localhost",
  •                     "Port": 9001
  •                 }
  •             ],
  •             "UpstreamPathTemplate": "/customers/{id}",
  •             "UpstreamHttpMethod": [ "Get" ]
  •         }
  •     ],
  •     "GlobalConfiguration": {
  •         "RequestIdKey": "OcRequestId",
  •         "AdministrationPath": "/administration"
  •     }
  • }
Note
请注意节点下的DownstreamHostAndPorts。在以前的Ocelot版本中,这个节点使用DownstreamHost和DownstreamPort来替换。
运行这两个项目,您可能会得到以下结果。

我的关键词 【Part 4】在ASP.NET Core中使用Ocelot构建API网关 - Rate Limiting  新闻咨询 image001
  
这意味着我们的准备工作已经完成了。现在,我们将把路由限制的配置添加到http://localhost:9000/customers。
Add Rate Limiting In configuration.json
我们只需要添加一个名为RateLimitOptions的节点。下面的代码展示了基本的配置。

  • {
  •     "DownstreamPathTemplate": "/api/values",
  •     "DownstreamScheme": "http",
  •     "DownstreamHostAndPorts": [
  •         {
  •             "Host": "localhost",
  •             "Port": 9001
  •         }
  •     ],
  •     "UpstreamPathTemplate": "/customers",
  •     "UpstreamHttpMethod": [ "Get" ],
  •     "RateLimitOptions": {
  •         "ClientWhitelist": [],
  •         "EnableRateLimiting": true,
  •         "Period": "1s",
  •         "PeriodTimespan": 1,
  •         "Limit": 1
  •     }
  • }
  • //others.....
让我们看一下RateLimitOptions节点的解释。

  • ClientWhitelist
    这是一个包含客户端白名单的数组。这意味着这个数组中的客户机不会受到路由限制的影响。使用方式:在客户端请求头中添加key:ClientId,value为网关配置白名单。

  • EnableRateLimiting
    是否启用路由限制。

  • Period
    指定周期,如1s、5m、1h、1d等。

  • PeriodTimespan
    指定我们可以在一定秒数后重试。

  • Limit
    指定客户端在定义的时间段内可以发出的最大请求数。
在上面的配置中,我们每秒只能访问一次。
让我们看看添加路由限制后的结果:
我的关键词 【Part 4】在ASP.NET Core中使用Ocelot构建API网关 - Rate Limiting  新闻咨询 ratelimit

正如您所看到的,它告诉我们API调用配额已经超出!最大允许1个1秒。您还可以看到以下截图。
我的关键词 【Part 4】在ASP.NET Core中使用Ocelot构建API网关 - Rate Limiting  新闻咨询 image002

响应状态码是429(请求太多)。而在响应标头中,它包含了retry-after,这意味着我们应该在1秒后重试一次。

Some More Configuration
我们已经完成了前一步的路由限制。
然而,你可能有三个问题:

  • 我们可以替换默认提示吗?
  • 我们可以移除速率限制的响应头吗?
  • 我们可以更改响应状态代码吗?
所有这些问题的答案都是肯定的。
如果我们想要更改这些设置,我们需要添加一些全局配置。


  • "GlobalConfiguration": {
  •     "RequestIdKey": "OcRequestId",
  •     "AdministrationPath": "/administration",
  •     "RateLimitOptions": {
  •       "DisableRateLimitHeaders": false,
  •       "QuotaExceededMessage": "Customize Tips!",
  •       "HttpStatusCode": 999
  •     }
  •   }
让我们来看看GlobalConfiguration中的RateLimitOptions节点!

  • DisableRateLimitHeaders
    指定是否禁用限制返回标头。

  • QuotaExceededMessage
    指定路由限制时的返回消息提示。

  • HttpStatusCode
    指定在发生路由限制时返回的HTTP状态码。
在添加这些配置之后,我们可以得到如下结果。
我的关键词 【Part 4】在ASP.NET Core中使用Ocelot构建API网关 - Rate Limiting  新闻咨询 image003


Summary
本文介绍了在Ocelot中如何使用速率限制模块。
希望能够帮到您。

原文地址:https://www.c-sharpcorner.com/article/building-api-gateway-using-ocelot-in-asp-net-core-rate-limiting-part-four

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表