본문 바로가기

Programming!

Netflix:Hystrix 사용해보기

주소 

https://github.com/Netflix/Hystrix/wiki

In a distributed environment, inevitably some of the many service dependencies will fail. Hystrix is a library that helps you control the interactions between these distributed services by adding latency tolerance and fault tolerance logic. Hystrix does this by isolating points of access between the services, stopping cascading failures across them, and providing fallback options, all of which improve your system’s overall resiliency.



기본적인 예제는 spring-boot과 함께 풀셋으로(cloud, turbine..) 구성되어 있다보니 부담이 이만저만..


우선 기존 플젝에 연동 하고 싶어서 이래 저래 사용해본결과.


- HystrixCommand 를 상속하거나..

- @HystrixCommand 를 사용하거나..


아무래도 Annotation의 사용이 편할 듯 하니 아래와 같이 build.gradle에 관련 lib를 추가하자.


    compile "com.netflix.hystrix:hystrix-core:1.5.2"

    compile "com.netflix.hystrix:hystrix-javanica:1.5.2"

    compile "com.netflix.hystrix:hystrix-metrics-event-stream:1.5.2"


대시보드 모니터링용 서블릿 추가 hystrix.stream

ServletRegistration.Dynamic hystrixServlet = servletContext.addServlet("HystrixMetricsStreamServlet", HystrixMetricsStreamServlet.class.getName());

hystrixServlet.addMapping("/hystrix.stream");


예제) 코드

@Service

public class HystrixRemoteCommand {


 @HystrixCommand(groupKey = "GroupA", commandKey = "GroupA. callA_A")

 public String callA_A() {

  return "Hello !";

 }


 @HystrixCommand(groupKey = "GroupA", commandKey = "GroupA. callA_B")

 public String callA_B() {

  return "Hello !";

 }


 @HystrixCommand(groupKey = "GroupB", commandKey = "GroupB. callB_A")

 public String callB_A() {

  return "Hello !";

 }

}


@Controller 

public class HystrixController {

....

 @Auto...

 private HystrixRemoteCommand hystrixRemoteCommand;


..... 호출 코드 

}



해당 URL 을 호출 해본 후, http://localhost:8080/hystrix.stream을 호출해 보자.

정상적인 json 데이터가 주기적으로 보여지면 된다.


대시 보드의 경우는 hystrix의 대시 보드를 다운받아서 실행 후,http://localhost:8080/hystrix.stream 주소를 등록하면 된다.




리모트 콜에 대한 처리에 있어서 많은 지원을 제공하기는 하는데, 요즘 관련 소스들이 많이 나오고들 있어서 실제 사용여부는 알 수 없다.

그래도, 경험상 리모트 관리에 있어서는 정말 많은 보조적인 준비를 해둬야 하지 싶다.