跳到主要内容
版本:2.10.x(Latest)

gRPC 支持拦截器(Interceptor)特性,允许开发者在 RPC 调用前后添加自定义逻辑,从而提高了 gRPC 的灵活性和可扩展性。拦截器类似于 HTTP 服务中的中间件,可用于实现日志记录、认证验证、性能监控、错误处理等通用功能。

拦截器使用

服务端

使用 grpcx.Server.ChainUnary 方法为服务端添加额外的一元拦截器(Unary Interceptor)。拦截器将按照添加顺序依次执行,形成拦截器链:

c := grpcx.Server.NewConfig()
c.Options = append(c.Options, []grpc.ServerOption{
grpcx.Server.ChainUnary(
grpcx.Server.UnaryValidate,
)}...,
)
s := grpcx.Server.New(c)
user.Register(s)
s.Run()

客户端

使用 grpcx.Client.ChainUnary 方法为客户端添加额外的一元拦截器。客户端拦截器可以在发送请求前后执行自定义逻辑:

conn = grpcx.Client.MustNewGrpcClientConn("demo", grpcx.Client.ChainUnary(
grpcx.Client.UnaryTracing,
))

拦截器列表

框架的 grpcx 组件提供了一系列常用的拦截器,部分为内置默认启用,部分可选择性引入使用。

拦截器使用位置是否内置功能描述
UnaryError客户端集成框架错误处理组件,用于统一错误处理。
UnaryTracing客户端支持分布式链路跟踪,自动传播 TraceID。
StreamTracing客户端支持流式 RPC 的链路跟踪(长连接)。
UnaryError服务端集成框架错误处理组件,用于统一错误处理。
UnaryRecover服务端自动捕获服务端处理过程中的 panic,防止服务崩溃。
UnaryAllowNilRes服务端允许返回 nil 的响应对象,提高灵活性。
UnaryValidate服务端基于结构体标签的自动数据校验,需要手动引入。
UnaryTracing服务端支持分布式链路跟踪,自动接收和传播 TraceID。
StreamTracing服务端支持流式 RPC 的链路跟踪(长连接)。