GRPC支持拦截器特性,提高了GRPC的灵活性和扩展性。

拦截器使用

服务端

使用grpcx.Server.ChainUnary增加额外的服务端拦截器:

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客户端支持链路跟踪。
StreamTracing客户端支持链路跟踪(长连接)。
UnaryError服务端支持框架错误处理组件。
UnaryRecover服务端支持服务端panic自动捕获不崩溃。
UnaryAllowNilRes服务端支持nilRes对象返回。
UnaryValidate服务端-支持框架的自动错误校验,基于结构体标签。需要手动引入。
UnaryTracing服务端支持链路跟踪。
StreamTracing服务端支持链路跟踪(长连接)。










Content Menu

  • No labels

5 Comments

  1. 能支持鉴权吗?

    1. 用户鉴权还是ip白名单? 如果是用户这应该是网关处理的.

      1. 在对外提供rpc服务的场景下的用户鉴权,比如一些app通过grpc来和服务进行交互

        1. 可以继续在Options继续追写ServerOption(就跟http的middleware一样).使用metadata传递令牌,在Interceptor用ctx取回令牌做校验.参照gRPC 鉴权方案

          1. 谢谢, 已实现。用的grpc自身的方法,框架本身没看到有这个封装