jxlwqq / blog-microservices

A blog microservices written in Golang, which can be deployed in an Istio-enabled kubernetes cluster.
MIT License
189 stars 40 forks source link

gRPC 拦截器顺序的设置 #8

Open jxlwqq opened 2 years ago

jxlwqq commented 2 years ago

https://github.com/jxlwqq/blog-microservices/commit/b796c75dc634e68cc80766c6d6ff2ea179c94c1c

各个拦截器的放置顺序就显得非常重要,比如为啥 panic 拦截器要放在第一个位置?如果放在后面的位置,那么假设前面拦截器运行过程中发生了 panic,就无法捕获到异常了。同理,需要对错误进行处理的拦截器,如果放置的位置不合适,获取不到相关的错误,那么该拦截器就无意义了(比如对于客户端的 breaker 熔断 / 超时重试 / 参数检查拦截器的位置,一般而言,是按照先检查输入参数 -> 熔断拦截器 -> 超时重试的顺序,因为熔断需要检查超时错误,但是对于参数校验错误就不关心)

https://pandaychen.github.io/2019/11/23/GRPC-INTERCEPTOR-APPLY/