Hystrix 라이브러리 적용
Hystrix 를 각 서비스를 호출하는 서비스인 Catalogs 서비스에 적용하도록 하겠다. 본
예제는 Customers 서비스에서 호출한 API 가 에러(Exception)이 발생하거나 지연(1 초
이상)되는 경우 별도의 fallback 메소드를 실행하여 장애의 전파를 방지한다.
Catalogs 서비스에 Hystrix 적용
Pom.xml 에 Hystrix 라이브러리 추가
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>${spring.cloud.version}</version>
</dependency>
CatalogsApplication.java 에 @EnableCircuitBreaker 어노테이션 추가
… @ComponentScan("egovframework.*") @EnableCircuitBreaker @SpringBootApplication public class CatalogsApplication { … } |
CustomerApiServiceImpl.java 의 getCustomerDetail 메소드에
@HystrixCommand 어노테이션 추가하고 Fallback 메소드를 추가 및 작성한다.
[참고]Fallback 메소드는 customers 서비스가 에러 또는 지연될 경우 곧 바로
Fallback 메소드를 호출하여 에러 전파를 방지한다.
@Override @HystrixCommand(fallbackMethod = "getCustomerDetailFallback") public String getCustomerDetail(String customerId) { return restTemplate.getForObject("http://localhost:8082/customers/" + customerId, String.class); } public String getCustomerDetailFallback(String customerId, Throwable ex) { System.out.println("Error:" + ex.getMessage()); return "고객정보 조회가 지연되고 있습니다."; } |
원활한 테스트를 위하여 customers 서비스에 강제로 Exception 을 발생하도록
한다.
@GetMapping("/{customerId}") public String getCustomerDetail(@PathVariable String customerId) { throw new RuntimeException("I/O Exception"); //System.out.println("request customerId :" + customerId); //return "[Customer id = " + customerId + " at " + System.currentTimeMillis() + "]"; } |
Customers 서비스의 CustomerController.java 수정
@GetMapping("/{customerId}") public String getCustomerDetail(@PathVariable String customerId) { throw new RuntimeException("I/O Exception"); //System.out.println("request customerId :" + customerId); //return "[Customer id = " + customerId + " at " + System.currentTimeMillis() + "]"; } |
Hystrix 구동 테스트
각각의 Catalogs 서비스 및 Customers 서비스를 구동하고 아래와 같이 테스트 URL 에
접속한다
URL : http://localhost:8081/catalogs/customerinfo/1234
'전자정부프레임워크' 카테고리의 다른 글
표준프레임워크) MSA_적용 개발 실습 -5 (0) | 2022.10.20 |
---|---|
표준프레임워크) MSA_적용 개발 실습 -3 (0) | 2022.10.20 |
표준프레임워크) MSA_적용 개발 실습 -2 (0) | 2022.10.20 |
표준프레임워크) MSA_적용 개발 실습 -1 (0) | 2022.10.20 |
전자정부 lab104 공통컴포넌트 생성 (0) | 2022.10.06 |