flowgate

    FlowGate - 3D concurrency limiter with event hooks for MoonBit

    concurrency
    rate-limit
    flow-control
    Download zip
    Author
    Version
    0.1.0
    License
    Apache-2.0
    Last updated
    4 months ago
    Downloads
    38

    No dependencies

    #FlowGate v0.1.0

    并发门控——三维限流(全局 + 键 + 会话)+ Builder 模式 + 事件钩子。

    适用于 AI Agent 框架、API 网关、任务调度器等需要流量控制的场景。

    #安装

    moon add flowgate

    #快速开始

    let gate = @flowgate.new_builder()
    .global(100) // 全局最大并发 100
    .per_key(10) // 每个 key 最多 10
    .per_session(5) // 每个 session 最多 5
    .queue_size(200) // 等待队列 200(0 = 不排队)
    .on_block(fn(reason) { println("BLOCKED: " + reason) })
    .on_acquire(fn(key, session, msg) { /* 埋点 */ })
    .build()

    match gate.acquire("tool-1", "user-abc") {
    Ok(msg) => { /* 执行业务 */; gate.release("tool-1", "user-abc") }
    Err(e) => println(e) // REJECTED 或 QUEUED
    }

    #快捷预设

    let dev = @flowgate.permissive_gate() // 500 / 50 / 20
    let prod = @flowgate.default_gate() // 100 / 10 / 5
    let strict = @flowgate.strict_gate() // 50 / 3 / 2

    #API 参考

    方法说明
    new_builder()创建 Builder
    .global(n)全局并发上限
    .per_key(n)每 key 并发上限
    .per_session(n)每 session 并发上限
    .queue_size(n)队列容量(0 = 满则拒)
    .on_block(fn)被拒/排队回调
    .on_acquire(fn)获得槽位回调
    .on_release(fn)释放槽位回调
    .build()构建 FlowGate
    gate.acquire(key, session)申请 → Ok / Err
    gate.release(key, session)释放槽位
    gate.available()剩余槽位数
    gate.is_full()是否满
    gate.stats()统计字符串

    #三层限流示意

    请求到达 │ ├─ 1. 全局上限检查 ← global_active >= max_global ? 拒绝/排队 ├─ 2. 键上限检查 ← key "tool-a" active >= per_key ? 拒绝/排队 ├─ 3. 会话上限检查 ← session "user-1" active >= per_session ? 拒绝/排队 │ └─ 全部通过 → 计数+1 → 返回 Ok

    #相关文档

    #许可证

    Apache-2.0 © AegisRun Authors