How in28minutes/spring-microservices-v2 works
This repository is a Spring Boot learning codebase: it pairs a REST API example with a progressively assembled microservices system and Docker/Kubernetes variants. The main service workflow is a client request to currency conversion, which obtains an exchange rate from the exchange service and returns a converted amount; the gateway, registry, configuration, and resilience features support that system. It also includes REST examples for users, filtering, versioning, and error handling. Some microservice capabilities are documented in the README but their wiring is unsampled, so those links are shown only where documented.
Main entry points: CurrencyConversionController.java Conversion service · CurrencyExchangeController.java Exchange service · ApiGatewayConfiguration.java API gateway · LimitsController.java Limits service
Components 24
REST API examples
- REST endpoints
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldController.java - User resources
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/user/UserResource.java - JPA user API
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/user/UserJpaResource.java - User DAO
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/user/UserDaoService.java - User model
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/user/User.java - Error handling
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/exception/CustomizedResponseEntityExceptionHandler.java - Response filtering
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/filtering/FilteringController.java - Filter model
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/filtering/SomeBean.java - API versioning
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/versioning/VersioningPersonController.java
Microservices
- Limits service
03.microservices/limits-service/src/main/java/com/in28minutes/microservices/limitsservice/controller/LimitsController.java - Limits configuration
03.microservices/limits-service/src/main/java/com/in28minutes/microservices/limitsservice/configuration/Configuration.java - Conversion service
03.microservices/currency-conversion-service/src/main/java/com/in28minutes/microservices/currencyconversionservice/CurrencyConversionController.java - Exchange client
03.microservices/currency-conversion-service/src/main/java/com/in28minutes/microservices/currencyconversionservice/CurrencyExchangeProxy.java - Exchange service
03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeController.java - Exchange repository
03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CurrencyExchangeRepository.java
Cloud platform
- Config server
03.microservices/spring-cloud-config-server/src/main/java/com/in28minutes/microservices/springcloudconfigserver/SpringCloudConfigServerApplication.java - API gateway
03.microservices/api-gateway/src/main/java/com/in28minutes/microservices/apigateway/ApiGatewayConfiguration.java - Eureka registry
03.microservices/naming-server/src/main/java/com/in28minutes/microservices/namingserver/NamingServerApplication.java - Circuit breaker
03.microservices/currency-exchange-service/src/main/java/com/in28minutes/microservices/currencyexchangeservice/CircuitBreakerController.java - Zipkin tracing
- RabbitMQ messaging
Deployment variants
- Docker services
04.docker - Kubernetes services
05.kubernetes
Other components
- API client
Connections 30
- API client → REST endpoints: requests
- REST endpoints → API client: returns response
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldController.java - API client → User resources: requests
- User resources → User DAO: uses DAO
- User DAO → User model: stores users
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/user/UserDaoService.java - JPA user API → User model: uses model
- Error handling → User model: handles not-found
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/exception/CustomizedResponseEntityExceptionHandler.java - Response filtering → Filter model: filters fields
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/filtering/FilteringController.java - API client → API versioning: selects version
02.restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/versioning/VersioningPersonController.java - API client → Limits service: requests limits
- Limits service → Limits configuration: reads settings
03.microservices/limits-service/src/main/java/com/in28minutes/microservices/limitsservice/controller/LimitsController.java - Limits service → Config server: loads config
- API client → API gateway: routes request
- API gateway → Conversion service: routes to
- Conversion service → Exchange client: invokes client
- Exchange client → Exchange service: requests rate
- Exchange service → Exchange repository: queries rates
- Conversion service → API client: returns conversion
- Conversion service → Eureka registry: registers service
- Exchange service → Eureka registry: registers service
- API gateway → Eureka registry: discovers routes
- Exchange service → Circuit breaker: exposes fallback
- Conversion service → Zipkin tracing: traces requests
- API gateway → Zipkin tracing: traces requests
- Exchange service → Zipkin tracing: traces requests
- Conversion service → RabbitMQ messaging: uses messaging
- Docker services → Conversion service: packages service
- Docker services → Exchange service: packages service
- Kubernetes services → Conversion service: deploys service
- Kubernetes services → Exchange service: deploys service