type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 12, 2023 01:02 PM
Parent item
领域
gRPC
的通信模式分为unary
和streaming
几种模式,拦截器也分为两种:unary interceptors
和streaming interceptors
。两种拦截器可以分别应用在服务端和客户端,所以gRPC总共为我们提供了四种拦截器。
它们已经被定义成了go中的接口,我们创建的拦截器只要实现这些接口即可。
服务端拦截器
对于
unary
服务的拦截器只需实现UnaryServerInterceptor
接口即可:对于
stream
服务的拦截器只要实现StreamServerInterceptor
接口即可。例子:客户端拦截器
流程和服务端类似。
拦截器链(注册多个拦截器)
把多个拦截器通过
grpc.ChainUnaryInterceptor
组装后,再注册到服务公共拦截器
除了可以自己实现拦截器外,gRPC生态也提供了一系列的开源的拦截器可供使用,覆盖权限、日志、监控等诸多方面
go-grpc-middleware
grpc-ecosystem • Updated Oct 12, 2024
公共拦截器有:
- 日志
- 可观测能力数据收集和发送:使用OpenTelemetry
- 性能测量: 接入
prometheus
- 权限检查与过滤
- panic恢复和恢复
- 负载均衡
。其中用到了几个第三方开源包:
oklog/run
:
go-kit
:一个老牌的微服务框架,在微服务框架领域,目前比较活跃的是go-zero