This has been created to illustrate the gRPC technology features alongside Protobuf in practise, including all 4 types of API:
We use blocking (non-async) stubs to make unary and server streaming requests. Async stub used for client streaming and bidirectional streaming. Used features:
| Feature | Java Client | Java Server | Kotlin Client | Kotlin Server | Python Client | Python Server |
|---|---|---|---|---|---|---|
| SSL/TLS secured channel | code | code | code | code | code | code |
| GZIP Compression | code | No need to define manually, included by default | code | No need to define manually, included by default | code | No need to define manually, included by default |
| Call deadline | code | - | code | - | code | - |
| JWT Metadata | code | code | code | code | code | code |
| Cancel call | - | code | - | code | - | code |
| Retry config | json | - | json | - | Manual circuit breaker + retries | - |
This project contains k8s deployments and services, so you can run this project easily on your env using minikube.
Run k8s/kubectl-apply.sh -f to start servers alongside all clients (Java, Kotlin, Python) one after another.
Another way to start directly via IntelliJ .run folders contain Run Configurations.