zoukankan      html  css  js  c++  java
  • .net core使用ocelot---第四篇 限流熔断

    简介

      .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文件

    {  
        "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"  
        }  
    }  

    注意

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

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

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

    在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.....  

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

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

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

    更多配置

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

             可能你会有下面的疑问。

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

      当然可以。

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

    "GlobalConfiguration": {  
        "RequestIdKey": "OcRequestId",  
        "AdministrationPath": "/administration",  
        "RateLimitOptions": {  
          "DisableRateLimitHeaders": false,  
          "QuotaExceededMessage": "Customize Tips!",  
          "HttpStatusCode": 999  
        }  
      }  

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

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

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

      源码在此

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

    总结

             Null

  • 相关阅读:
    Linux用户配置文件、口令配置文件、组配置文件
    Linux忘记Root密码怎么找回
    Linux运行级别及解释
    Maven获取resources的文件路径、读取resources的文件
    常见状态码100、200、300、400、500等
    JVM内存模型
    tcl使用小结
    MFQ&&PPDCS
    总结下自己在工作中有关联的TCP/IP协议
    二层交换机和三层交换机
  • 原文地址:https://www.cnblogs.com/xlxr45/p/11321385.html
Copyright © 2011-2022 走看看