본문 바로가기

전자정부프레임워크

표준프레임워크) MSA_적용 개발 실습 -4

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