How tanbinrkyser/currency-exchange works
This repository demonstrates two Spring Boot services: clients request a conversion, which obtains an exchange rate over HTTP and calculates the total; the exchange service looks up seeded rates in an in-memory H2 database. Conversion supports both RestTemplate and OpenFeign, with timeouts, a shared circuit breaker, and unavailable-service responses. Compose and Kubernetes provide service discovery and deployment; Kubernetes adds replicas and health probes. Prometheus and Grafana expose a separate monitoring branch. Runtime calls are grounded in sampled source; deployment and monitoring details follow the README and listed manifests.
Main entry points: CurrencyExchangeController.java Exchange API · CurrencyConversionController.java Conversion API · CurrencyConversionService.java Conversion calculation · deployment.yaml Exchange deployment
Components 19
Conversion service
- Conversion API
currency-conversion-microservice/src/main/java/com/tusker/currencyconversionmicroservice/controller/CurrencyConversionController.java - Conversion calculation
currency-conversion-microservice/src/main/java/com/tusker/currencyconversionmicroservice/service/CurrencyConversionService.java - RestTemplate client
currency-conversion-microservice/src/main/java/com/tusker/currencyconversionmicroservice/CurrencyConversionMicroserviceApplication.java - OpenFeign proxy
currency-conversion-microservice/src/main/java/com/tusker/currencyconversionmicroservice/service/CurrencyExchangeProxy.java - Conversion result
currency-conversion-microservice/src/main/java/com/tusker/currencyconversionmicroservice/model/CurrencyConversion.java - Unavailable handler
currency-conversion-microservice/src/main/java/com/tusker/currencyconversionmicroservice/exception/ExchangeServiceExceptionHandler.java
Exchange service
- Exchange API
currency-exchange-service/src/main/java/com/tusker/currencyexchangeservice/controller/CurrencyExchangeController.java - Rate lookup
currency-exchange-service/src/main/java/com/tusker/currencyexchangeservice/service/CurrencyExchangeService.java - Exchange repository
currency-exchange-service/src/main/java/com/tusker/currencyexchangeservice/repository/CurrencyExchangeRepository.java - In-memory H2
currency-exchange-service/src/main/resources/application.properties - Exchange rate
currency-exchange-service/src/main/java/com/tusker/currencyexchangeservice/model/CurrencyExchange.java - Bulkhead sample API
currency-exchange-service/src/main/java/com/tusker/currencyexchangeservice/controller/CircuitBreakerController.java
Deployment runtime
- Compose services
compose.yaml - Conversion deployment
currency-conversion-microservice/deployment.yaml - Exchange deployment
currency-exchange-service/deployment.yaml - Exchange URI config
currency-conversion-microservice/configmap.yaml
Monitoring
- Prometheus
prometheus.yml - Grafana
Other components
- API client
Connections 22
- API client → Conversion API: requests
- Conversion API → Conversion calculation: dispatches
- Conversion calculation → RestTemplate client: calls direct
- Conversion calculation → OpenFeign proxy: calls Feign
- RestTemplate client → Exchange API: HTTP request
- OpenFeign proxy → Exchange API: HTTP request
- Exchange API → Rate lookup: looks up
- Rate lookup → Exchange repository: queries
- Exchange repository → In-memory H2: reads rates
- Rate lookup → Exchange API: returns rate
- Exchange API → Exchange rate: returns rate
- Conversion calculation → Conversion result: builds result
- Conversion API → Conversion result: returns result
- Conversion API → Unavailable handler: maps failures
- Compose services → Conversion deployment: runs service
- Compose services → Exchange deployment: runs service
- Exchange URI config → Conversion calculation: sets exchange URI
- Conversion deployment → Exchange deployment: discovers service
- Exchange deployment → Exchange deployment: replicates pods
- Conversion API → Prometheus: exposes metrics
- Exchange API → Prometheus: exposes metrics
- Prometheus → Grafana: provides metrics