#rate-limiting #limit #rate #axum #extractor #web-apps #minutes

axum-limit

基于令牌桶的速率限制库,围绕异步 Web 应用程序的提取器限制而构建

2 个版本

0.1.0-alpha.12024 年 4 月 24 日

#451 in 异步

MIT 许可证

20KB
287 代码行

axum-limit

crates.io crates.io download LICENSE dependency status GitHub Workflow Status 此 crate 提供了一种基于令牌桶的效率速率限制机制,专门设计用于具有强大提取器限制的异步 Web 应用程序。

功能

  • 使用提取器配置速率限制,允许每个路由具有灵活的限制策略。
  • 支持各种时间粒度的速率限制(每秒、每分钟、每小时和每天)。
  • 易于与 Axum 集成,使用提取器在应用程序路由中无缝应用速率限制。
  • 利用 DashMap 在异步任务之间进行并发状态管理。

示例

以下是一个基本示例,展示如何使用此 crate 与 Axum 路由一起使用

use axum_limit::{Limit, LimitState, LimitPerSecond};
use axum::{Router, routing::get};

async fn route_handler(_: LimitPerSecond<5, Uri>) -> impl IntoResponse {
    // Handler logic here, automatically enforcing the rate limit
}

fn main() {
    let _app = Router::new()
        .route("/your_route", get(route_handler))
        .with_state(LimitState::<Uri>::default());
}

此示例演示了在特定路由上设置每秒 5 个请求的速率限制。 Limit 提取器会自动根据传入的请求强制执行这些限制。

有关更全面的示例,请检查此存储库中的 examples 目录。

依赖项

~2.5–8MB
~66K SLoC