🥌【gRPC】拦截器开发及公共拦截器的使用
2022-10-7
| 2023-10-12
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 12, 2023 01:02 PM
Parent item
领域
gRPC的通信模式分为unarystreaming几种模式,拦截器也分为两种:unary interceptorsstreaming interceptors
两种拦截器可以分别应用在服务端和客户端,所以gRPC总共为我们提供了四种拦截器。
它们已经被定义成了go中的接口,我们创建的拦截器只要实现这些接口即可。

服务端拦截器

notion image
对于unary服务的拦截器只需实现UnaryServerInterceptor接口即可:
 
对于stream服务的拦截器只要实现StreamServerInterceptor接口即可。例子:

客户端拦截器

notion image
流程和服务端类似。

拦截器链(注册多个拦截器)

把多个拦截器通过grpc.ChainUnaryInterceptor组装后,再注册到服务

公共拦截器

除了可以自己实现拦截器外,gRPC生态也提供了一系列的开源的拦截器可供使用,覆盖权限、日志、监控等诸多方面
go-grpc-middleware
grpc-ecosystemUpdated Oct 12, 2024
公共拦截器有:
  • 日志
  • 性能测量: 接入prometheus
  • 权限检查与过滤
  • panic恢复和恢复
  • 负载均衡
。其中用到了几个第三方开源包:
  • oklog/run
  • go-kit:一个老牌的微服务框架,在微服务框架领域,目前比较活跃的是go-zero

例子

软件开发
  • GoLang
  • RPC
  • 【项目管理】SemVer:语义化版本管理【gRPC】Golang中简单RPC服务开发-更新编码和传输协议
    目录