Used the following dependencies
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.58.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.58.0</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.22.3</version>
</dependency>
<dependency>
<groupId>com.salesforce.servicelibs</groupId>
<artifactId>reactor-grpc-stub</artifactId>
<version>1.2.4</version>
</dependency>
It contains server, client, and proto modules, demonstrates
- How Grpc Intercepeptors (both client and server) can be configured
- Observablity - logger traceId etc can be passed with the help of micrometer(It is not fully implemented)
- How ManagedChannel can be created and used. (Single Channel is used for all, however it creates a problem during load run, requests may be messed up due to webflux. Thinking for a solution)
- Mapstruct is used to transulate dtos to protos
To - be done:
- implement a backend database integration (webflux supported db)
- Caching - Apache Ignite - CDC (using Apsectj)
- Fully Implement Logging and tracing
- graphql with grpc
- Exception handling around GRPC exchange