热门标签 | 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



推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Ext JS MVC系列一:环境搭建与框架概览
    本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
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社区 版权所有