Golang gRPC在拦截器Interceptor中获取请求和响应数据的方法
import (
"context"
"fmt"
"google.golang.org/grpc"
)
// 自定义拦截器
func CustomInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
// 在发送请求前,可以从ctx中获取元数据
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, fmt.Errorf("无法从上下文中获取元数据")
}
// 打印请求的元数据
fmt.Println("请求的元数据:", md)
// 处理请求
resp, err := handler(ctx, req)
if err != nil {
return nil, err
}
// 打印响应的数据
fmt.Println("响应的数据:", resp)
return resp, nil
}
// 使用拦截器
func main() {
// 初始化grpc服务器并添加自定义拦截器
grpcServer := grpc.NewServer(grpc.UnaryInterceptor(CustomInterceptor))
// 注册服务
// ...
// 启动gRPC服务器
// ...
}
这段代码展示了如何在gRPC的拦截器中获取请求和响应的元数据,并打印出来。在实际应用中,你可以根据需要对这些元数据进行验证、日志记录或其他处理。
评论已关闭