for cloud connectors • On top of Spring Boot • config server for distributed configuration • Eureka annotations for service-discovery • Hystrix annotations for resilience enhancements
HTTP resource “/env” shows all properties • overwrite via application.properties or CLI parameter @ComponentScan @EnableAutoConfiguration public class OrderApp { public static void main(String[] args) { SpringApplication.run(OrderApp.class, args); } }
resolveProduct(String productUri) { final RestTemplate restTemplate = new RestTemplate(); return new Pair(productUri, restTemplate.getForEntity(productUri, Product.class)); } private Pair<String, ResponseEntity<Product>> fallbackProduct(String productUri) { final Product product = new Product(productUri, null, BigDecimal.ZERO); final ResponseEntity<Product> response = new ResponseEntity<Product>(product, PARTIAL_CONTENT); return new Pair(productUri, response); } Spring Cloud Hystrix
resolveProduct(String productUri) { final RestTemplate restTemplate = new RestTemplate(); return new Pair(productUri, restTemplate.getForEntity(productUri, Product.class)); } private Pair<String, ResponseEntity<Product>> fallbackProduct(String productUri) { final Product product = new Product(productUri, null, BigDecimal.ZERO); final ResponseEntity<Product> response = new ResponseEntity<Product>(product, PARTIAL_CONTENT); return new Pair(productUri, response); } Spring Cloud Hystrix wrapped in command -> async!
resolveProduct(String productUri) { final RestTemplate restTemplate = new RestTemplate(); return new Pair(productUri, restTemplate.getForEntity(productUri, Product.class)); } private Pair<String, ResponseEntity<Product>> fallbackProduct(String productUri) { final Product product = new Product(productUri, null, BigDecimal.ZERO); final ResponseEntity<Product> response = new ResponseEntity<Product>(product, PARTIAL_CONTENT); return new Pair(productUri, response); } Spring Cloud Hystrix
resolveProduct(String productUri) { final RestTemplate restTemplate = new RestTemplate(); return new Pair(productUri, restTemplate.getForEntity(productUri, Product.class)); } private Pair<String, ResponseEntity<Product>> fallbackProduct(String productUri) { final Product product = new Product(productUri, null, BigDecimal.ZERO); final ResponseEntity<Product> response = new ResponseEntity<Product>(product, PARTIAL_CONTENT); return new Pair(productUri, response); } Spring Cloud Hystrix
Java code… …will display it in the /metrics JSON counterService.increment("checkouts.withproducts." + productUris.size()); GET /metrics HTTP/1.1 { "counter.checkouts.withproducts.3": 4, ... }