Files
Claude def73fa1c4 Add spring-boot-microservices-project: config server, Eureka, gateway and three services on Boot 4.1.1 + Spring Cloud 2025.1.3
Product, order and inventory services behind Spring Cloud Gateway (WebMVC), configuration from a Config Server,
discovery with Eureka, a Resilience4j circuit breaker on order -> inventory and Brave tracing. Run as six plain jars;
output/ holds real transcripts (config, registry, requests, trace propagation, circuit breaker, startup race and the
load-balanced RestClient.Builder trap). Dockerfile and docker-compose.yml are included but were not run.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HhW8LD8r3EigoBaCGrQZx5
2026-10-21 17:08:42 +00:00

2.8 KiB

spring-boot-microservices-project

A small e-commerce system on Spring Boot 4.1.1 and Spring Cloud 2025.1.3, written for the article Spring Boot Microservices Project: Gateway, Discovery, Config and 3 Services.

client ──> gateway :8080 ──> product-service   :8081
                         ├─> order-service     :8082 ──> product-service   (read the price)
                         │                          └──> inventory-service (reserve stock, circuit breaker)
                         └─> inventory-service :8083
config-server :8888   serves every service's configuration (and the gateway's routes)
discovery-server :8761  (Eureka) every service registers here and finds the others here
Module What it is
config-server Spring Cloud Config Server, native profile; files in src/main/resources/config/
discovery-server Eureka server
gateway Spring Cloud Gateway Server WebMVC; routes come from the config server (gateway.yml)
product-service GET /products, GET /products/{id}
inventory-service stock levels, POST /inventory/{id}/reserve, a switch to simulate an outage
order-service POST /orders; calls product-service and inventory-service through the load balancer and a Resilience4j circuit breaker

Run it (no Docker needed)

Needs JDK 21+, Maven 3.9+, curl and python3.

./scripts/run-all.sh        # build, start the six services, run the scenarios, stop everything
./scripts/start.sh          # or: start the services and leave them running
./scripts/demo.sh           # re-run the scenarios (rewrites output/)
./scripts/stop.sh

Start order matters: config server first (everything else reads its configuration from it), then Eureka, then the rest.

Docker

Dockerfile and docker-compose.yml are provided but were not run: the sandbox this was written in had no Docker. Treat them as a starting point, not a tested artifact.

Captured output

Every file in output/ is written by scripts/demo.sh from real requests. Nothing is typed by hand.

File What it shows
01-config-server.txt What the config server serves and the value the order service ended up with
02-eureka-registry.txt The instances registered in Eureka
03-gateway-requests.txt Requests through the gateway: products, stock, orders, and the error cases
04-trace-propagation.txt One request, one trace id, in the logs of four services
05-circuit-breaker.txt The circuit breaker going CLOSED, OPEN, and back to CLOSED

Versions

Spring Boot 4.1.1, Spring Framework 7, Spring Cloud 2025.1.3 (its BOM is built against Boot 4.0.8; it ran here on 4.1.1), Tomcat 11, Java 21 (OpenJDK 21.0.12). JDK 25 was not available when this was written.