中间件

Zeus 中间件基于 Interceptor 接口和 Chain 类型组合。

内置中间件

职责
middleware/recoverypanic 恢复(默认装配)
middleware/requestid请求 ID 注入(默认装配)
middleware/accesslog访问日志(默认装配)
middleware/timeout请求超时控制
middleware/clusteringcluster 自动注入

plugins 中间件

职责
plugins/middleware/tracing自动 trace 埋点 + cluster attr
plugins/middleware/metrics自动 metrics 埋点 + cluster label

链式组合

 1import (
 2    "github.com/go-zeus/zeus/middleware"
 3    "github.com/go-zeus/zeus/middleware/recovery"
 4    metricsmw "github.com/go-zeus/zeus/plugins/middleware/metrics"
 5    tracingmw "github.com/go-zeus/zeus/plugins/middleware/tracing"
 6)
 7
 8// 链顺序:外 → 内
 9chain := middleware.NewChain(
10    recovery.New(),
11    tracingmw.New(tracer),
12    metricsmw.New(meter),
13)

L1 vs L3 默认链差异

默认中间件说明
L1/L2 (app.Run)requestid → accesslog → recovery(/health 等端点单独路由,非中间件)自动包装
L3 (app.NewApp)空(用户显式 WithMiddleware用户完全控制

L3 不自动包装的原因:用户已直接构造 http.NewHTTP(),对 server 中间件链有完全控制。

自定义 Interceptor

1// Interceptor 是接口(非函数类型),需实现 Intercept + Name 两个方法
2type Interceptor interface {
3    Intercept(ctx context.Context, req Request, handler Handler) (Response, error)
4    Name() string
5}
6// Request / Response / Handler 都是 middleware 包内定义的接口类型(非裸 *http.Request)

实现该签名即可作为中间件使用,无需任何额外抽象。