中间件
基本定义
和web中间件概念一致,grpc中间件分为普通中间件针对普通服务,和流中间件针对流服务,我们对其进行了封装
接口
普通中间件类型
type UnaryServerInterceptor func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (resp interface{}, err error)
流中间件类型
type StreamServerInterceptor func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error
案例
普通中间件
func RecoveryInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
defer func() {
if e := recover(); e != nil {
debug.PrintStack()
err = status.Errorf(codes.Internal, "Panic err: %v", e)
}
}()
return handler(ctx, req)
}
流中间件
func StreamLoggingInterceptor(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error{
log.Printf("gRPC method: %s, %v", info.FullMethod)
err := handler(srv, stream)
log.Printf("gRPC method: %s", info.FullMethod)
return err
}
最后更新于
这有帮助吗?