From c77be7c57112d5a5bbd671ef887453d16578d88f Mon Sep 17 00:00:00 2001 From: Asim Date: Sat, 16 May 2015 00:33:43 +0100 Subject: [PATCH] Add grpc client and example --- client/rpc_client.go | 14 ++++++++++++++ examples/grpc_client.go | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 examples/grpc_client.go diff --git a/client/rpc_client.go b/client/rpc_client.go index 89d347a6..b917ae2a 100644 --- a/client/rpc_client.go +++ b/client/rpc_client.go @@ -14,6 +14,8 @@ import ( rpc "github.com/youtube/vitess/go/rpcplus" js "github.com/youtube/vitess/go/rpcplus/jsonrpc" pb "github.com/youtube/vitess/go/rpcplus/pbrpc" + ctx "golang.org/x/net/context" + "google.golang.org/grpc" ) type headerRoundTripper struct { @@ -32,6 +34,18 @@ func (t *headerRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) } func (r *RpcClient) call(address, path string, request Request, response interface{}) error { + switch request.ContentType() { + case "application/grpc": + cc, err := grpc.Dial(address) + if err != nil { + return errors.InternalServerError("go.micro.client", fmt.Sprintf("Error connecting to server: %v", err)) + } + if err := grpc.Invoke(ctx.Background(), path, request.Request(), response, cc); err != nil { + return errors.InternalServerError("go.micro.client", fmt.Sprintf("Error sending request: %v", err)) + } + return nil + } + pReq := &rpc.Request{ ServiceMethod: request.Method(), } diff --git a/examples/grpc_client.go b/examples/grpc_client.go new file mode 100644 index 00000000..55c5c3a5 --- /dev/null +++ b/examples/grpc_client.go @@ -0,0 +1,23 @@ +package main + +import ( + "fmt" + + h "github.com/grpc/grpc-common/go/helloworld" + "github.com/myodc/go-micro/client" +) + +// run github.com/grpc/grpc-common/go/greeter_server/main.go +func main() { + req := client.NewRpcRequest("helloworld.Greeter", "SayHello", &h.HelloRequest{ + Name: "John", + }, "application/grpc") + + rsp := &h.HelloReply{} + err := client.CallRemote("localhost:50051", "helloworld.Greeter/SayHello", req, rsp) + if err != nil { + fmt.Println(err) + } + + fmt.Println(rsp.Message) +}