我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ASP.NET Core设置Ocelot网关限流

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ASP.NET Core设置Ocelot网关限流

1.限流(Rate Limiting)

很多时候为了防止DoS攻击,我们会通过限流方式对上游请求进行限制,以保护下游服务不会负荷过载,为客户端提供高质量的资源服务。在Ocelot限流项目示例中,通过APIGateway项目路由RateLimitOptions选项可以配置限流。对解决方案的示例APIServices项目Get方法进行限流,文件配置具体代码如下:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/api/values",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 9001
        }
      ],
      "UpstreamPathTemplate": "/customers",
      "UpstreamHttpMethod": [ "Get" ],
      "RateLimitOptions": {
        //客户端白名单。名单中的客户端不会被限流。
        "ClientWhitelist": [],
        //是否启用限流。
        "EnableRateLimiting": true,
        //限流时间(1s,5m,1h,1d)。在限流时间内限制请求数,需要等PeriodTimespan时间过去了,才能再次发起请求。
        "Period": "1s",
        //限流时间间隔,限流后多少秒后才可以再次发起请求。
        "PeriodTimespan": 3,
        //限制请求数。
        "Limit": 1
      }
    }
  ],
  //全局配置,所有下游服务都执行如下限流配置
  "GlobalConfiguration": {
    "RequestIdKey": "OcRequestId",
    "AdministrationPath": "/administration",
    "RateLimitOptions": {
      //是否禁用X-Rate-Limit和Retry-After标头。
      "DisableRateLimitHeaders": false,
      //限流返回的消息。
      "QuotaExceededMessage": "Customize Tips!"
    }
  }
}

下面来介绍下RateLimitOptions选项几个参数:

  • ClientWhitelist:客户端白名单。名单中的客户端不会被限流。
  • EnableRateLimiting:是否启用限流。
  • Period:限流时间(1s,5m,1h,1d)。在限流时间内限制请求数,需要等PeriodTimespan时间过去了,才能再次发起请求。
  • PeriodTimespan:限流时间间隔,限流后多少秒后才可以再次发起请求。
  • Limit:限制请求数。
  • DisableRateLimitHeaders:是否禁用X-Rate-Limit和Retry-After标头。
  • QuotaExceededMessage:限流返回的消息。
  • HttpStatusCode:限流时候,指定返回的HTTP状态代码。
  • ClientIdHeader:允许您指定应用于标识客户端的标头。默认情况下为“ClientId”。

2.项目演示

2.1APIGateway项目

添加Ocelot服务注入和Logging信息输出:

public class Startup
{
    public Startup(IWebHostEnvironment env)
    {
        var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
        builder.SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json")
                //add configuration.json
                .AddJsonFile("configuration.json", optional: false, reloadOnChange: true)
                .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        //输出Logging信息;
        services.AddLogging(logging =>
        {
            logging.AddConsole();
            logging.AddDebug();
        });
        //添加Ocelot服务;
        services.AddOcelot(Configuration);
    }

    public void Configure(IApplicationBuilder app)
    {
        //使用Ocelot;
        app.UseOcelot().Wait();
    }
}

2.2APIServices项目

项目添加一个Get方法,对应APIGateway项目的路由上下游配置,具体代码如下:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    // GET api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

2.3项目运行

输入dotnet run --project 项目路径\项目文件.csproj把两个项目启动起来,通过在浏览器不断刷新上游服务地址,会看到如下信息:

根据上述信息可以知道在1秒时间内,如果请求数超过路由配置限制数,那么Ocelot网关就会直接返回429状态码和全局给客户端,不会再转发到对应下游服务方法去,防止了客户端恶意攻击,保证了下游服务不会负荷过载!

到此这篇关于ASP.NET Core设置Ocelot网关限流的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ASP.NET Core设置Ocelot网关限流

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

亚马逊服务器ec2怎么关闭连接网络权限设置

打开终端或命令提示符,输入以下命令来退出当前会话:purge-e等待一段时间,退出会话。在终端或命令提示符中输入以下命令来保存更改:purge/etc/ssh/config保存更改后,您应该会在当前会话中看到这个更改。请注意,在保存更改时,请确保您有相应的访问权限。如果您没有访问权限,则无法保存更改。
2023-10-27

阿里云服务器关机了,如何打开网页设置权限

如果您已经关闭了阿里云服务器,您可以通过以下步骤重新开启它:登录阿里云控制台。在控制台中,您可以通过按Ctrl+X或Ctrl+V来访问已停止的服务器列表。在此列表中,您可以找到已停止的服务器,并单击其名称,以重新启动服务器。找到已停止的服务器。如果您已经找到了一个服务器,并且该服务器已停止,您可以单击该服务器,然后选择
阿里云服务器关机了,如何打开网页设置权限
2023-10-28

华为云服务器关闭后怎么开启网络连接权限设置

华为云服务器关闭后,你需要检查你的网络连接设置,以便能够重新加载网络连接并允许访问华为云服务器的用户访问。以下是具体步骤:检查华为云服务器的网络设置。你可以从华为云服务器的控制台菜单或在华为云服务器官网上查找相关指南。确保华为云服务器提供了正确的配置选项,如IP地址范围和TCP/IP连接数限制等。重新加载华为云服务器的网络连接设置。在重新加载网络连接设置后,你需要等待数秒钟或更长时间,以确保它仍在使用。重...
2023-10-26

阿里云服务器关机了,如何打开网页权限设置密码

首先,您需要确保您的云服务器具有可用的IP地址和可用的端口,以便能够成功登录。如果您使用的是阿里云官方的VPN连接,可以尝试使用VPN客户端或者浏览器登录控制台,以获取更多的登录控制权限。在登录控制台之后,您可以根据需要进行权限设置。具体的权限设置方法可以参考阿里云控制台的相关文档。一般来说,您可以设置云服务器的基本管
阿里云服务器关机了,如何打开网页权限设置密码
2023-10-28

ASP.NET Core设置URLs的方法汇总(完美解决.NET 6项目局域网IP地址远程无法访问的问题)

本文汇总了ASP.NETCore中设置URL的方法,包括绝对URL、相对URL、路由、TagHelpers、UrlHelper和URL生成器。此外,还介绍了如何在.NET6中解决局域网IP地址远程无法访问的问题,方法包括禁用IIS集成、绑定到IPv4地址或使用UseUrls方法。通过了解这些方法,开发者可以根据应用程序的需要定制URL,确保应用程序在不同网络环境中都可访问。
ASP.NET Core设置URLs的方法汇总(完美解决.NET 6项目局域网IP地址远程无法访问的问题)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录