🧠What is gRPC and Why Use It?
This project demonstrates how to implement server-side streaming using gRPC in a Spring Boot application with Java 11. The use case simulates a stock ticker that streams real-time stock prices to the client.
- Java 11
- Spring Boot 2.7.x
- gRPC (1.54.0)
- Protocol Buffers (proto3)
- Maven
- WebFlux + Server-Sent Events (SSE) for REST integration
✅Code Repository Link
Link - grpc-stock-streaming-rest
Generate gRPC Java Code - mvn clean compile
Run the Application - mvn spring-boot:run
REST to gRPC Streaming via SSE GET - http://localhost:8080/api/stream?symbol=AAPL
✅ Project Structure
- grpc-stock-streaming/ ├── pom.xml ├── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── grpc/ │ │ ├── GrpcApplication.java # Bootstraps Spring Boot │ │ ├── StockService.java # gRPC service implementation │ │ ├── StockClient.java # gRPC client stub (non-blocking) │ │ └── StockController.java # REST API exposing SSE endpoint │ ├── proto/ │ │ └── stock.proto # gRPC service + messages │ └── resources/ │ └── application.properties # gRPC & Spring server config
✅ Class Explanations
✅ stock.proto Explained in Detail
- syntax = "proto3"; option java_multiple_files = true; option java_package = "com.example.grpc"; option java_outer_classname = "StockProto"; service StockTicker { rpc StreamStockPrices (StockRequest) returns (stream StockResponse); } message StockRequest { string symbol = 1; } message StockResponse { string symbol = 1; double price = 2; }
✅ REST → gRPC Call Flow Diagram
Browser / Postman / curl │ ▼ GET /api/stream?symbol=AAPL (SSE endpoint) │ ▼ StockController │ ▼ StockClient (gRPC Stub) │ ▼ [Non-blocking StreamObserver] │ ▼ gRPC Network Call (localhost:9090) │ ▼ StockService (on Server) │ [5x response] │ ▼ StockClient → REST Stream (Flux/SSE) → Browser
🧠What is gRPC and Why Use It?