1) 시나리오
- A서버에서 B서버에 http call
- A서버 -> circuit breaker -> B서버
- 전체 소스 : https://github.com/qwer9412/circuit_breaker_test
2) pom.xml에 dependency 추가
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- spring-cloud-starter-hystrix 라이브러리 추가
- properties에 버전과 dependencyManagement가 없으면 아래와 같은 오류 발생함
- java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.([Ljava/lang/Object;)
3) circuit breaker (GetACircuitBreaker) 코드
@Service
public class GetACircuitBreaker {
@Autowired
RestTemplate restTemplate;
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@GetMapping("/A")
@HystrixCommand(fallbackMethod = "getFallback")
public ADto getA() {
ADto value_a = (ADto)restTemplate.exchange("http://localhost:8081/B", HttpMethod.GET,null
,new ParameterizedTypeReference<ADto>(){}).getBody();
return value_a;
}
public ADto getFallback() {
return new ADto("x","x");
}
}
- @HystrixCommand annotation으로 Circuit Breaker 로직 생성
- getFallback 메서드는 B서버에서 응답 실패 시 실행
4) A controller
@RestController
public class AController {
@Autowired
GetACircuitBreaker getACircuitBreaker;
@GetMapping("/A")
public ADto getA() {
ADto value_a = getACircuitBreaker.getA();
return value_a;
}
}
5) B controller
@RestController
public class BController {
@GetMapping("/B")
public BDto getB() {
return new BDto("o","o",Arrays.asList("hello","world"));
}
}
6) 결과
- http 통신 성공하면 {s1="o", s2="o", list={hello, world}}
- http 통신 실패시 {s1="x, s2="x", list={}}
관련 글
Circuit breaker 패턴 - 1) Circuit breaker 이해하기
Circuit Breaker 패턴 - 2) 넷플릭스의 Hystrix 라이브러리 사용하기
'디자인 패턴 > Circuit breaker 패턴' 카테고리의 다른 글
Circuit Breaker 패턴 - 2) 넷플릭스의 Hystrix 라이브러리 사용하기 (0) | 2020.04.16 |
---|---|
Circuit breaker 패턴 - 1) Circuit breaker란 (0) | 2020.04.08 |