gRPC Reflection Example ================ The reflection example has a Hello World server with `ProtoReflectionService` registered. ### Build the example To build the example server, from the `grpc-java/examples/examples-reflection` directory: ``` $ ../gradlew installDist ``` This creates the scripts `build/install/example-reflection/bin/reflection-server`. ### Run the example gRPC Server Reflection provides information about publicly-accessible gRPC services on a server, and assists clients at runtime to construct RPC requests and responses without precompiled service information. It is used by gRPCurl, which can be used to introspect server protos and send/receive test RPCs. 1. To start the reflection example server on its default port of 50051, run: ``` $ ./build/install/example-reflection/bin/reflection-server ``` 2. After enabling Server Reflection in a server application, you can use gRPCurl to check its services. Instructions on how to install and use gRPCurl can be found at [gRPCurl Installation](https://github.com/fullstorydev/grpcurl#installation) After installing gRPCurl, open a new terminal and run the commands from the new terminal. ### List all the services exposed at a given port ``` $ grpcurl -plaintext localhost:50051 list ``` Output ``` grpc.reflection.v1alpha.ServerReflection helloworld.Greeter ``` ### List all the methods of a service ``` $ grpcurl -plaintext localhost:50051 helloworld.Greeter ``` Output ``` helloworld.Greeter.SayHello ``` ### Describe services and methods The describe command inspects a method given its full name(in the format of `..`). ``` $ grpcurl -plaintext localhost:50051 describe helloworld.Greeter.SayHello ``` Output ``` helloworld.Greeter.SayHello is a method: rpc SayHello ( .helloworld.HelloRequest ) returns ( .helloworld.HelloReply ); ``` ### Inspect message types We can use the describe command to inspect request/response types given the full name of the type (in the format of `.`). Get information about the request type: ``` $ grpcurl -plaintext localhost:50051 describe helloworld.HelloRequest ``` Output ``` helloworld.HelloRequest is a message: message HelloRequest { string name = 1; } ``` ### Call a remote method We can send RPCs to a server and get responses using the full method name (in the format of `..`). The `-d ` flag represents the request data and the -format text flag indicates that the request data is in text format. ``` $ grpcurl -plaintext -format text -d 'name: "gRPCurl"' \ localhost:50051 helloworld.Greeter.SayHello ``` Output ``` message: "Hello gRPCurl" ```