热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.netcore使用ocelot第四篇限流熔断

简介        前几篇文章我们陆续介绍如何用asp.netcore创建api网关。        这次我们讨论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替代。

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


  我们的准备工作完成了,接下来我们对配置流量限制。

在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



推荐阅读
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
author-avatar
leee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有