grpc-java/examples/README.md

129 lines
3.8 KiB
Markdown

grpc Examples
==============================================
The examples require grpc-java to already be built. You are strongly encouraged
to check out a git release tag, since there will already be a build of grpc
available. Otherwise you must follow [COMPILING](../COMPILING.md).
You may want to read through the
[Quick Start Guide](https://grpc.io/docs/quickstart/java.html)
before trying out the examples.
## Basic examples
- [Hello world](src/main/java/io/grpc/examples/helloworld)
- [Route guide](src/main/java/io/grpc/examples/routeguide)
- [Metadata](src/main/java/io/grpc/examples/header)
- [Error handling](src/main/java/io/grpc/examples/errorhandling)
- [Compression](src/main/java/io/grpc/examples/experimental)
- [Flow control](src/main/java/io/grpc/examples/manualflowcontrol)
- [Json serialization](src/main/java/io/grpc/examples/advanced)
- [Authentication](AUTHENTICATION_EXAMPLE.md)
### To build the examples
1. **[Install gRPC Java library SNAPSHOT locally, including code generation plugin](../COMPILING.md) (Only need this step for non-released versions, e.g. master HEAD).**
2. Run in this directory:
```
$ ./gradlew installDist
```
This creates the scripts `hello-world-server`, `hello-world-client`,
`route-guide-server`, `route-guide-client`, etc. in the
`build/install/examples/bin/` directory that run the examples. Each
example requires the server to be running before starting the client.
For example, to try the hello world example first run:
```
$ ./build/install/examples/bin/hello-world-server
```
And in a different terminal window run:
```
$ ./build/install/examples/bin/hello-world-client
```
That's it!
Please refer to gRPC Java's [README](../README.md) and
[tutorial](https://grpc.io/docs/tutorials/basic/java.html) for more
information.
### Maven
If you prefer to use Maven:
1. **[Install gRPC Java library SNAPSHOT locally, including code generation plugin](../COMPILING.md) (Only need this step for non-released versions, e.g. master HEAD).**
2. Run in this directory:
```
$ mvn verify
$ # Run the server
$ mvn exec:java -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldServer
$ # In another terminal run the client
$ mvn exec:java -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldClient
```
### Bazel
If you prefer to use Bazel:
```
(With Bazel v0.8.0 or above.)
$ bazel build :hello-world-server :hello-world-client
$ # Run the server
$ bazel-bin/hello-world-server
$ # In another terminal run the client
$ bazel-bin/hello-world-client
```
## Other examples
- [Android examples](android)
- Secure channel examples
+ [TLS examples](example-tls)
+ [ALTS examples](example-alts)
- [Kotlin examples](example-kotlin)
- [Kotlin Android examples](example-kotlin/android)
## Unit test examples
Examples for unit testing gRPC clients and servers are located in [examples/src/test](src/test).
In general, we DO NOT allow overriding the client stub.
We encourage users to leverage `InProcessTransport` as demonstrated in the examples to
write unit tests. `InProcessTransport` is light-weight and runs the server
and client in the same process without any socket/TCP connection.
For testing a gRPC client, create the client with a real stub
using an
[InProcessChannel](../core/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java),
and test it against an
[InProcessServer](../core/src/main/java/io/grpc/inprocess/InProcessServerBuilder.java)
with a mock/fake service implementation.
For testing a gRPC server, create the server as an InProcessServer,
and test it against a real client stub with an InProcessChannel.
The gRPC-java library also provides a JUnit rule,
[GrpcCleanupRule](../testing/src/main/java/io/grpc/testing/GrpcCleanupRule.java), to do the graceful
shutdown boilerplate for you.
## Even more examples
A wide variety of third-party examples can be found [here](https://github.com/saturnism/grpc-java-by-example).