protobuf-demo/client/main.go

52 lines
1.3 KiB
Go

package main
import (
"context"
"encoding/json"
"log"
"time"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
"myschools.me/suguo/protobuf-demo/gen"
"myschools.me/suguo/protobuf-demo/model"
)
//interceptor 客户端拦截器
func interceptor(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
start := time.Now()
err := invoker(ctx, method, req, reply, cc, opts...)
log.Printf("method == %s ; req == %v ; rep == %v ; duration == %s ; error == %v\n", method, req, reply, time.Since(start), err)
return err
}
func main() {
rpc, err := grpc.Dial("127.0.0.1:55887", grpc.WithBlock(), grpc.WithInsecure(), grpc.WithUnaryInterceptor(interceptor))
if err != nil {
log.Fatalln(err)
}
srv := gen.NewDemoClient(rpc)
rtx, cancel := context.WithTimeout(context.Background(), time.Second)
rtx = context.WithValue(rtx, "token", "hello")
defer cancel()
defer rpc.Close()
md := metadata.MD{}
md.Set("token", "hello")
rtx = metadata.NewOutgoingContext(rtx, md)
resp, err := srv.Call(rtx, &gen.DemoCallResquest{
C1: "hello",
})
if err != nil {
log.Fatalln(err)
}
usr := &model.User{}
if err := json.Unmarshal(resp.Data.Value, usr); err != nil {
log.Fatalln(err)
}
t, _ := json.Marshal(usr)
log.Printf("%s", string(t))
}