netcore限流
netcore限流
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Caching.Memory;
public class RateLimitMiddleware
{
private readonly RequestDelegate _next;
private readonly IMemoryCache _cache;
private readonly int _limit;
private readonly TimeSpan _interval;
public RateLimitMiddleware(RequestDelegate next, IMemoryCache cache, int limit, TimeSpan interval)
{
_next = next;
_cache = cache;
_limit = limit;
_interval = interval;
}
public async Task InvokeAsync(HttpContext context)
{
var cacheKey = GetCacheKey(context.Request.Path);
var requestCount = _cache.GetOrCreate(cacheKey, entry =>
{
entry.SetSlidingExpiration(_interval);
return 0;
});
if (requestCount >= _limit)
{
context.Response.StatusCode = StatusCodes.Status429TooManyRequests;
await context.Response.WriteAsync($"Rate limit exceeded. Try again in {_interval.TotalSeconds} seconds.");
}
else
{
_cache.Set(cacheKey, requestCount + 1, _interval);
await _next(context);
}
}
private string GetCacheKey(string path)
{
return $"ratelimit:{path}";
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<RateLimitMiddleware>(limit: 100, interval: TimeSpan.FromMinutes(1));
// ...
}
这个示例中,将 RateLimitMiddleware 注册为全局 Middleware,并指定最大请求数为 100,限制时间为 1 分钟。
使用 Middleware 实现接口限流可以灵活地控制请求的流量,提高服务的可靠性和稳定性。同时,也可以通过配置不同的参数来适应不同的业务需求。
netcore限流的更多相关文章
- Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Ocelot+Polly缓存、限流、熔断、降级
相关文章 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网 ...
- .Netcore 2.0 Ocelot Api网关教程(7)- 限流
本文介绍Ocelot中的限流,限流允许Api网关控制一段时间内特定api的总访问次数.限流的使用非常简单,只需要添加配置即可. 1.添加限流 修改 configuration.json 配置文件,对 ...
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们 ...
- 不死的小强 .net core 微服务 快速开发框架 Viper 限流
1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...
- WebApiThrottle限流框架使用手册
阅读目录: 介绍 基于IP全局限流 基于IP的端点限流 基于IP和客户端key的端点限流 IP和客户端key的白名单 IP和客户端key自定义限制频率 端点自定义限制频率 关于被拒请求的计数器 在we ...
- [WCF编程]9.性能与限流
一.性能概述 WCF服务的性能取决于很多因素.出了CPU.RAM和网络性能等常见的因素外,实例上下文模式.并发模式.数据契约的设计或使用的绑定等与WCF有关的因素都起着重要的作用. 实例上下文模式用来 ...
- 快速入门系列--WCF--06并发限流、可靠会话和队列服务
这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数量并可以起到削峰的作用,最后还会对之前的 ...
- WCF Throttling 限流的三道闸口
WCF Throttling 限流的三道闸口 一.WCF Throttling 流量限制简介 我们期望WCF服务端能够处理尽可能多的并发请求,但是资源是有限的,服务不可能同时处理无限多的并发请求,如 ...
- 控制ASP.NET Web API 调用频率与限流
ASP.NET MVC 实现 https://github.com/stefanprodan/MvcThrottle ASP.NET WEBAPI 实现 https://github.com/stef ...
- Open vSwitch 给虚拟机网卡限流(QoS)
这里我们简单描述下如何通过Open vSwitch给虚拟机限流(出流量),同时测试限流效果.测试环境继续复用<整合Open vSwitch与DNSmasq为虚拟机提供DHCP功能>一文中描 ...
随机推荐
- flutter-原生路由传自定义对象
自定义对象 1 class Dk { 2 int id; 3 String title; 4 String address; 5 String ww; 6 String account; 7 } 传值 ...
- 微信分享前端开发全程详解含iOS、安卓、H5、ReactNative以及微信开放标签的适配和使用
2024年9月,本人在做微信分享前端部分的iOS.安卓和H5的页面和功能时踩了不少坑,于是写了这篇文章,内容包括微信分享在上面三个端的技术点和坑点.解决办法,微信开放标签的相关适配,以及ReactNa ...
- docker - [01] docker入门
弱小和无知不是生存的障碍,傲慢才是. -- <三体> 一.相关链接 Docker官网:https://www.docker.com/ 文档地址:https://docs.docker.co ...
- DeepSeek 多模态大模型 Janus-Pro 本地部署教程
下载模型仓库 git clone https://github.com/deepseek-ai/Janus.git 国内下载仓库失败时,可以使用以下代理: git clone https://gith ...
- linux tmux 使用教程
前言 Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具. 本文介绍如何使用 Tmux. 一.Tmux 是什么? 1.1 会话与进程 命令行的典型使用 ...
- Docker使用手册--给你通用常用命令
卸载JDK rpm -qa | grep -i java rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps 安装JDK tar -zxvf jdk- ...
- 系统自带模版在 emlog pro 1.8.0 底部信息错位问题暂时的解决方案
问题描述 作为一名 emlog 爱好者,笔者闲暇时间经常为 emlog 系统的 Github 仓库里( https://github.com/emlog/emlog )提 pr 和修修补补,就像其他知 ...
- exGCD 2025/1/10
前言: 全文均为蒟蒻作者手搓 虽也参考了许多 [luogu 题解/某SDN/cnblogs.com] 但很多地方均为作者瞎编 如有错误务必救救孩子 File int GCD(int a,int b){ ...
- 使用SPA单页面跟MPA多页面的优缺点?
SPA vs MPA 深度解析 1. 概述 什么是 SPA? SPA(Single Page Application,单页面应用)是一种仅加载一个 HTML 页面,并通过 JavaScript 动态更 ...
- 【JDBC第3章】使用PreparedStatement实现CRUD操作
第3章:使用PreparedStatement实现CRUD操作 3.1 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果.其实一个数据库连接就是一 ...