go语言grpc metadata获取与写入

客户端写入:

   //md := metadata.Pairs("name", "张三", "pwd", "123456")
   //或
   md := metadata.New(
      map[string]string{
         "name": "张三",
         "pwd":  "123456",
      })

   ctx := metadata.NewOutgoingContext(context.Background(), md)

完整代码

package main

import (
   "fmt"
   "golang.org/x/net/context"
   "google.golang.org/grpc"
   "google.golang.org/grpc/metadata"
   pb "rpc/hello_proto/proto" // 引入编译生成的包
)

const (
   // Address gRPC服务地址
   Address = "127.0.0.1:12345"
)

func main() {
   // 连接
   conn, err := grpc.Dial(Address, grpc.WithInsecure())
   if err != nil {
      fmt.Println(err)
   }
   defer conn.Close()

   // 初始化客户端
   c := pb.NewHelloClient(conn)

   //客户端 写入metadata
   //md := metadata.Pairs("name", "张三", "pwd", "123456")
   //或
   md := metadata.New(
      map[string]string{
         "name": "张三",
         "pwd":  "123456",
      })

   ctx := metadata.NewOutgoingContext(context.Background(), md)

   // 调用方法
   req := &pb.HelloRequest{Name: "gRPC"}
   res, err := c.SayHello(ctx, req)

   if err != nil {
      fmt.Println(err)
   }

   fmt.Println(res.Message)
}


服务端获取:

  md, ok := metadata.FromIncomingContext(ctx)
   if !ok {
      fmt.Println("metadata get err")
   } else {
      if name, ok := md["name"]; ok {
         fmt.Println(name[0])
      }
   }

完整代码:

package main

import (
   "fmt"
   "google.golang.org/grpc/metadata"
   "net"

   "golang.org/x/net/context"
   "google.golang.org/grpc"
   "google.golang.org/grpc/grpclog"
   pb "rpc/hello_proto/proto" // 引入编译生成的包
)

const (
   // Address gRPC服务地址
   Address = "127.0.0.1:12345"
)

// 定义helloService并实现约定的接口
type helloService struct{}

// HelloService Hello服务
var HelloService = helloService{}

// SayHello 实现Hello服务接口
func (h helloService) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
   //服务端 获取metadata
   md, ok := metadata.FromIncomingContext(ctx)
   if !ok {
      fmt.Println("metadata get err")
   } else {
      if name, ok := md["name"]; ok {
         fmt.Println(name[0])
      }
   }

   resp := new(pb.HelloResponse)
   resp.Message = fmt.Sprintf("Hello %s.", in.Name)

   return resp, nil
}

func main() {
   listen, err := net.Listen("tcp", Address)
   if err != nil {
      grpclog.Fatalf("Failed to listen: %v", err)
   }

   // 实例化grpc Server
   s := grpc.NewServer()

   // 注册HelloService
   pb.RegisterHelloServer(s, HelloService)

   grpclog.Println("Listen on " + Address)
   s.Serve(listen)
}


最后编辑于:2022/01/10作者: 牛逼PHP

发表评论