Skip to content

Commit 7a6355c

Browse files
committed
Add SetTrailer and SetHeader in metadata_interceptor example
1 parent 9d08ab0 commit 7a6355c

File tree

2 files changed

+60
-3
lines changed

2 files changed

+60
-3
lines changed

examples/features/metadata_interceptor/client/main.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,35 @@ import (
2929

3030
"google.golang.org/grpc"
3131
"google.golang.org/grpc/credentials/insecure"
32+
"google.golang.org/grpc/metadata"
3233

3334
pb "google.golang.org/grpc/examples/features/proto/echo"
3435
)
3536

3637
var addr = flag.String("addr", "localhost:50051", "the address to connect to")
3738

3839
func callUnaryEcho(ctx context.Context, client pb.EchoClient) {
39-
resp, err := client.UnaryEcho(ctx, &pb.EchoRequest{Message: "hello world"})
40+
var header, trailer metadata.MD
41+
resp, err := client.UnaryEcho(
42+
ctx,
43+
&pb.EchoRequest{Message: "hello world"},
44+
grpc.Header(&header),
45+
grpc.Trailer(&trailer))
46+
4047
if err != nil {
4148
log.Fatalf("UnaryEcho: %v", err)
4249
}
4350
fmt.Println("UnaryEcho: ", resp.Message)
51+
52+
fmt.Println("Received headers:")
53+
for k, v := range header {
54+
fmt.Printf("%s: %v\n", k, v)
55+
}
56+
57+
fmt.Println("Received trailers:")
58+
for k, v := range trailer {
59+
fmt.Printf("%s: %v\n", k, v)
60+
}
4461
}
4562

4663
func callBidiStreamingEcho(ctx context.Context, client pb.EchoClient) {
@@ -64,6 +81,22 @@ func callBidiStreamingEcho(ctx context.Context, client pb.EchoClient) {
6481
}
6582
fmt.Println("BidiStreaming Echo: ", resp.Message)
6683
}
84+
85+
header, err := c.Header()
86+
if err != nil {
87+
log.Fatalf("Receiving headers: %v", err)
88+
} else {
89+
fmt.Println("Received headers:")
90+
for k, v := range header {
91+
fmt.Printf("%s: %v\n", k, v)
92+
}
93+
}
94+
95+
trailer := c.Trailer()
96+
fmt.Println("Received tailers:")
97+
for k, v := range trailer {
98+
fmt.Printf("%s: %v\n", k, v)
99+
}
67100
}
68101

69102
func main() {

examples/features/metadata_interceptor/server/main.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,22 @@ func unaryInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo,
4949
return nil, errMissingMetadata
5050
}
5151

52+
// create and set metadata from interceptor to server
5253
md.Append("key1", "value1")
5354
ctx = metadata.NewIncomingContext(ctx, md)
5455

55-
return handler(ctx, req)
56+
// call the handler to complete the normal execution of the RPC
57+
resp, err := handler(ctx, req)
58+
59+
// create and set header metadata from interceptor to client
60+
header := metadata.Pairs("header-key", "val")
61+
grpc.SetHeader(ctx, header)
62+
63+
// create and set trailer metadata from interceptor to client
64+
trailer := metadata.Pairs("trailer-key", "val")
65+
grpc.SetTrailer(ctx, trailer)
66+
67+
return resp, err
5668
}
5769

5870
func (s *server) UnaryEcho(ctx context.Context, in *pb.EchoRequest) (*pb.EchoResponse, error) {
@@ -89,10 +101,22 @@ func streamInterceptor(srv any, ss grpc.ServerStream, info *grpc.StreamServerInf
89101
return errMissingMetadata
90102
}
91103

104+
// create and set metadata from interceptor to server
92105
md.Append("key1", "value1")
93106
ctx := metadata.NewIncomingContext(ss.Context(), md)
94107

95-
return handler(srv, &wrappedStream{ss, ctx})
108+
// call the handler to complete the normal execution of the RPC
109+
err := handler(srv, &wrappedStream{ss, ctx})
110+
111+
// create and set header metadata from interceptor to client
112+
header := metadata.Pairs("header-key", "val")
113+
ss.SetHeader(header)
114+
115+
// create and set trailer metadata from interceptor to client
116+
trailer := metadata.Pairs("trailer-key", "val")
117+
ss.SetTrailer(trailer)
118+
119+
return err
96120
}
97121

98122
func (s *server) BidirectionalStreamingEcho(stream pb.Echo_BidirectionalStreamingEchoServer) error {

0 commit comments

Comments
 (0)