5. "Microservices is a software architecture design
pattern, in which complex applications are composed of
small, independent processes communicating with each
other using language-agnostic APIs. These services are
small, highly decoupled and focus on doing a small
task."
MADRID · NOV 21-22 · 2014
10. MADRID · NOV 21-22 · 2014
Nuevos desafíos
∘ ¿Cómo localizo los servicios?
∘ ¿Qué pasa si alguno falla?
∘ ¿Cómo los configuro?
∘ ¿Y las trazas?
∘ ¿Y los diferentes entornos?
20. MADRID · NOV 21-22 · 2014
Eureka Server
@Configuration
@EnableAutoConfiguration
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
21. MADRID · NOV 21-22 · 2014
Eureka Server
@Configuration
@EnableAutoConfiguration
@EnableEurekaServer
public class Application {
application.yml
server:
port: 8761
eureka:
instance:
public static void main(String[] args) {
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
22. MADRID · NOV 21-22 · 2014
Eureka Client
@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() { return "Hello world"; }
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true).run(args);
}
}
23. MADRID · NOV 21-22 · 2014
Eureka Client
@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() { return "Hello world"; }
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true).run(args);
}
}
application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
24. MADRID · NOV 21-22 · 2014
Ribbon
Transparente vía RestTemplate
RibbonAutoConfiguration.java
@Bean
@ConditionalOnMissingBean(RestTemplate.class)
public RestTemplate restTemplate(RibbonInterceptor ribbonInterceptor) {
RestTemplate restTemplate = new RestTemplate();
List<ClientHttpRequestInterceptor> list = new ArrayList<>();
list.add(ribbonInterceptor);
restTemplate.setInterceptors(list);
return restTemplate;
}
}
http://github.com/.../RibbonAutoConfiguration.java
25. MADRID · NOV 21-22 · 2014
Hystrix wrapper
@Component
public class StoreIntegration {
@HystrixCommand(fallbackMethod = "defaultStores")
public Object getStores(Map<String, Object> parameters) {
//do stuff that might fail
}
public Object defaultStores(Map<String, Object> parameters) {
return /* something useful */;
}
}
26. MADRID · NOV 21-22 · 2014
Hystrix Config
@Configuration
@EnableAutoConfiguration
@EnableHystrix
@EnableHystrixDashboard
@ComponentScan
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
27. MADRID · NOV 21-22 · 2014
Hystrix Dashboard
http://techblog.netflix.com/2012/12/hystrix-dashboard-and-turbine.html
29. Spring Cloud Config
∘ Properties en repositorio Git
∘ API
∘ App/Profile
∘ Encriptado
∘ @RefreshScope
https://github.com/spring-cloud/spring-cloud-config
MADRID · NOV 21-22 · 2014
30. MADRID · NOV 21-22 · 2014
Spring Cloud Config - Server
@Configuration
@EnableAutoConfiguration
@EnableEurekaClient
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
31. MADRID · NOV 21-22 · 2014
Spring Cloud Config - Server
@Configuration
@EnableAutoConfiguration
@EnableEurekaClient
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
bootstrap.yml
spring:
application:
name: configserver
encrypt:
keyStore:
location: classpath:keystore.jks
password: ${KEYSTORE_PASSWORD} # foobar
alias: test
application.yml
spring:
cloud:
config:
server:
basedir: target/config
uri: https://github.com/ehdez73/minionize-the-world-config
security:
user:
password: '{cipher}AQBunH7b87s86E='
32. MADRID · NOV 21-22 · 2014
Spring Cloud Config - Client
@Configuration
@EnableAutoConfiguration
@RestController
public class Application {
@RequestMapping("/")
public String home() { return "Hello world"; }
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
33. MADRID · NOV 21-22 · 2014
Spring Cloud Config - Client
@Configuration
@EnableAutoConfiguration
@RestController
public class Application {
@RequestMapping("/")
public String home() { return "Hello world"; }
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
bootstrap.yml
spring:
cloud:
config:
uri: http://localhost:${config.port:8888}
42. MADRID · NOV 21-22 · 2014
MINIONIZE THE WORLD !!!
Minions ipsum tulaliloo
potatoooo pepete jeje baboiii
poulet tikka masala chasy la
bodaaa butt. La bodaaa
aaaaaah tulaliloo wiiiii la
bodaaa la bodaaa belloo!
Tulaliloo para tú belloo! Me
want bananaaa! Para tú
aaaaaah bananaaaa para tú jiji
po kass. Potatoooo tulaliloo
potatoooo chasy me want
bananaaa! Ti aamoo! para tú.
https://github.com/ehdez73/minionize-the-world
The minions
43. MADRID · NOV 21-22 · 2014
Muchas gracias
@ehdez73