【发布时间】:2023-03-12 03:45:01
【问题描述】:
我正在像这样启动我的 gRPC 服务器:
func Run(...) ... {
// this is variable I want to add to all my request handler's context
foo := "bar"
grpcServer := grpc.NewServer()
grpc_health_v1.RegisterHealthServer(grpcServer, health.NewServer())
pb.RegisterMyServer(grpcServer, newServer())
signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT)
go func() {
if err := grpcServer.Serve(lis); err != nil {
errChan <- err
}
}()
return grpcServer, nil
}
以下是“ping”请求的处理程序示例:
func (s *myServer) Ping(
ctx context.Context,
pingRequest *pb.PingRequest,
) (*pb.PingResponse, error) {
return &pb.PingResponse{}, nil
}
您可以在Run() 中看到我有一个变量foo,我希望我的所有请求处理程序都可以使用它。这个变量不依赖于客户端的请求,它只需要在请求处理程序中可用。
实现这一目标的最佳方法是什么?
- 使用单例
- 使用全局
- 以某种方式将其添加到 gRPC 请求上下文中?
【问题讨论】:
-
将其用作 myServer 中的属性字段
-
@nipuna 你能分享一个例子吗?在这种情况下,
MyServer是由 protoc 生成的,所以不确定我将如何在.proto中定义它