tower
围绕 Service、Layer 和 tower-http 的中间件抽象。
-
tower(四):tower-http-HTTP 专用中间件
tower-http 提供 20+ 个 HTTP 专用中间件 (压缩、CORS、Tracing、Header 操作等), 它们构建在 tower 的泛型 Service trait 之上, 兼容任何使用 http + http-body crate 的框架 -- axum、hyper、tonic 都能直接使用, 不需要每个框架重复实现.
-
tower(三):内置中间件-限流、重试、超时与缓冲
tower 提供协议无关的通用中间件, 每个都通过 feature flag 独立启用. 核心六个: ConcurrencyLimit (并发数上限), RateLimit (速率限制), Timeout (超时), Retry (重试 + Policy trait), Buffer (mpsc 通道使 Service 可 Clone), LoadShed (过载丢弃). 它们与 tower-http 的 HTTP 专用中间件互补而非重复.
-
tower(二):Layer 与 ServiceBuilder-中间件组合机制
Layer trait 定义了"如何把一个 Service 包装成另一个 Service", ServiceBuilder 提供声明式 API 将多个 Layer 按顺序堆叠. 中间件组合在编译期完成类型嵌套 (如 Timeout<RateLimit<ConcurrencyLimit<S>>>), 零运行时开销, 这是 tower 与 Express/Koa 等运行时中间件链的本质区别.
-
tower(一):Service trait-异步函数抽象与背压信号
tower::Service<Request> 把任何异步请求-响应操作抽象为一个 trait, 核心设计是 pollready + call 两步协议 -- 先问"你准备好了吗", 再发请求. pollready 的存在使得负载均衡器能探测下游容量, 实现真正的背压传播, 这是 tower 区别于其他中间件框架的根本设计决策.