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.