52 lines
1.3 KiB
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))
|
|
}
|