ASP.NET Core设置Ocelot网关限流

 更新时间:2022年04月08日 14:09:41   作者:暗断肠  
这篇文章介绍了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网关限流的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • ASP.NET中的C#基础知识

    ASP.NET中的C#基础知识

    本文主要介绍了ASP.NET中的C#基础知识。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Redis中pop出队列多个元素思考

    Redis中pop出队列多个元素思考

    本文主要介绍了Redis中pop出队列多个元素思考,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • asp.net 开发的一些常用技巧

    asp.net 开发的一些常用技巧

    asp.net开发过程中,发现的一些不错技巧,能用的到的朋友有福了。
    2009-07-07
  • 浅析ASP.NET万能JSON解析器

    浅析ASP.NET万能JSON解析器

    这篇文章主要是对ASP.NET万能JSON解析器进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • 一步步打造简单的MVC电商网站BooksStore(2)

    一步步打造简单的MVC电商网站BooksStore(2)

    这篇文章主要和大家一起一步步打造一个简单的MVC电商网站,MVC电商网站BooksStore第二篇,添加分类导航、加入购物车,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 高仿Windows Phone QQ登录界面实例代码

    高仿Windows Phone QQ登录界面实例代码

    这篇文章主要介绍了高仿Windows Phone QQ登录界面实例代码,有需要的朋友可以参考一下
    2013-12-12
  • asp.net SAF 中缓存服务的实现

    asp.net SAF 中缓存服务的实现

    对缓存的兴趣源于张子阳写的一篇文章《SAF 中缓存服务的实现》中的一个例子:
    2008-08-08
  • ASP.NET Session会导致的性能问题

    ASP.NET Session会导致的性能问题

    你的站点有被客户投诉很慢吗?是不是查了很多遍还是没有完全解决?是不是数据库没有发现异常,CPU也没有异常,内存占用量没有异常,GC计数没有异常,硬盘IO也没有异常,带宽没有异常,线路没有异常,没有丢包,但就是被投诉?
    2009-07-07
  • 浅谈ASP.NET Core 2.0 布局页面(译)

    浅谈ASP.NET Core 2.0 布局页面(译)

    本篇文章主要介绍了浅谈ASP.NET Core 2.0 布局页面(译),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Asp.Net类库中发送电子邮件的代码

    Asp.Net类库中发送电子邮件的代码

    发送电子邮件是许多需要用户注册的网站的通用功能,通过正则表达式我们可以过滤掉不符合电子邮件格式的输入,但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址
    2008-09-09

最新评论