flowgate

FlowGate - 3D concurrency limiter with event hooks for MoonBit

concurrency
rate-limit
flow-control
moon add tuya-me/flowgate@0.1.0
Download zip
Author
Version
0.1.0
License
Apache-2.0
Last updated
last month
Downloads
10
README

#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