Notably, protobuf to 3.25.8, opentelemetry to 1.52.0. Protobuf in Bazel has 25.5 in the BCR and it seems better to align the WORKSPACE with that version. But we can't actually use 25.5 in BCR because it is incompatible with Bazel 7. |
||
|---|---|---|
| .. | ||
| src/main | ||
| README.md | ||
| build.gradle | ||
| settings.gradle | ||
README.md
gRPC Reflection Example
The reflection example has a Hello World server with ProtoReflectionServiceV1 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.
- To start the reflection example server on its default port of 50051, run:
$ ./build/install/example-reflection/bin/reflection-server
- 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
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 list helloworld.Greeter
Output
helloworld.Greeter.SayHello
Describe services and methods
The describe command inspects a method given its full name(in the format of
<package>.<service>.<method>).
$ 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 <package>.<type>).
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 <package>.<service>.<method>). The -d <string> 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"