spring-grpc-cloud-starter is a small reference repository for:
- Spring Boot 4
- Spring gRPC
- Spring Cloud DiscoveryClient
- Spring Cloud Alibaba Nacos
- JDK 25
The main goal is to make discovery:///service-name style gRPC calls work with the official Spring gRPC stack through a Spring Cloud Discovery based adaptation layer.
Current Spring gRPC does not provide a built-in Spring Cloud Discovery based NameResolver. This repository fills that gap with:
spring-grpc-discovery-starterspring-grpc-nacos-discovery-starter
demo-grpc-proto-sdkGenerates Java messages and gRPC stubs from the rootproto/directory.spring-grpc-discovery-starterGeneric client-side starter fordiscovery:///service-namebased onDiscoveryClient.spring-grpc-nacos-discovery-starterNacos-specific provider-side starter that publishesgRPC_portmetadata automatically.demo-grpc-providerMinimal provider app with HTTP + gRPC.demo-grpc-consumerMinimal consumer app that calls provider throughdiscovery:///demo-grpc-provider.
- repository version:
1.0.0 - JDK:
25 - Spring Boot:
4.0.5 - Spring Cloud:
2025.1.1 - Spring Cloud Alibaba:
2025.1.0.0 - Spring gRPC:
1.0.2 - grpc-java:
1.77.1
This repository does not provide Docker Compose for Nacos.
Prepare an existing Nacos server and update these values in env/demo.env:
Example:
NACOS_SERVER_ADDR=127.0.0.1:8848
NACOS_USERNAME=nacos
NACOS_PASSWORD=nacos
NACOS_NAMESPACE=demo
NACOS_GROUP=DEFAULT_GROUPUse JDK 25.
mvn clean installset -a
source env/demo.env
set +a
java -jar demo-grpc-provider/target/demo-grpc-provider-1.0.0.jarProvider ports:
- HTTP:
8081 - gRPC:
9091
set -a
source env/demo.env
set +a
java -jar demo-grpc-consumer/target/demo-grpc-consumer-1.0.0.jarConsumer port:
- HTTP:
8082
Check Nacos first:
demo-grpc-provideris registereddemo-grpc-consumeris registered- provider metadata contains
gRPC_port=9091
Then call:
curl "http://127.0.0.1:8082/api/consumer/call?name=codex"Expected response:
{"message":"hello","source":"consumer-http"}Add dependency:
<dependency>
<groupId>com.github.hyacinth</groupId>
<artifactId>spring-grpc-discovery-starter</artifactId>
<version>1.0.0</version>
</dependency>Channel example:
spring:
grpc:
client:
channels:
provider:
address: discovery:///demo-grpc-provider
hyacinth:
grpc:
discovery:
enabled: true
load-balancing-policy: round_robinAdd dependency:
<dependency>
<groupId>com.github.hyacinth</groupId>
<artifactId>spring-grpc-nacos-discovery-starter</artifactId>
<version>1.0.0</version>
</dependency>When the application has both:
- Spring gRPC server enabled
- Nacos discovery enabled
the starter automatically publishes gRPC_port into Nacos metadata.
spring-grpc-discovery-starterstays generic and only depends onDiscoveryClientspring-grpc-nacos-discovery-starterkeeps Nacos-specific provider registration logic out of the generic starter- instance metadata key is fixed as
gRPC_port - if
gRPC_portis missing, resolver falls back to the instance port - if a later refresh temporarily returns no instances, the resolver keeps the last successful resolution instead of immediately dropping usable addresses
This repository is intentionally small, but it is organized as a public starter repository instead of a one-off demo.
It is suitable for:
- validating
discovery:///service-name - extracting reusable starter code
- preparing an upstream issue or pull request reference for Spring gRPC
- publishing reusable starter artifacts to GitHub or Maven repositories
It is not intended to be a full platform or production template.