无论客户端还是服务端在远程调用前后执行一些通用逻辑,例如Gin框架,实现日志、监控、认证、Recover等通用逻辑,gRPC也提供这样的机制。
拦截器分为:一元拦截器、流拦截器,这两种拦截器在客户端、服务端都可以使用。拦截器的执行流程如图:其中InHandlerx
与outHandlerx
是同一个函数,被拆成上下两部分。
1. 一元拦截器
1)复制learn01 到 learn11
2)编写客户端程序,添加拦截器,记录调用时间TimeInterceptor
,invoker表示调用下一级路径,下级执行完成后返回,再执行log.Printf("method:%s, exec:%d", method, time.Now().Sub(now).Milliseconds())
,这样就实现执行远程调用前后的逻辑处理。
func TimeInterceptor(ctx context.Context, method