8

나는 내 머리를 Hystrix으로 감싸려고 노력 중이며, 문서를 읽은 후에도 사용 패턴에 대해 질문이 있습니다.가 반응성 실행 대 자신의 비동기 실행을 사용하는 경우Hystrix 실행 패턴

하나, 나는 사용 사례을 이해하지 않습니다. 내가 볼 수있는 유일한 차이점은 비동기 실행은 항상 비 차단이지만 Reactive는 차단 또는 비 차단 일 수 있다는 것입니다. 그래서 내 진짜 질문은 다음과 같습니다.

  • 동기식 및 블로킹 반응식 실행의 차이점은 무엇입니까?
  • 비동기 및 비 차단 반응 실행의 차이점은 무엇입니까?

답변

20

두 개의 서비스 호출 A와 B를 HystrixCommand으로 랩했다고 가정합시다. 이제 세 가지 옵션이 있습니다.

.execute() : 순수 동기 호출. 결과가 도착하면 메서드를 호출하고 프로그램을 계속 진행합니다. 프로그램의 총 실행 시간은 두 호출의 합계입니다. 프로그램의 주요 흐름은 매우 직선적입니다.

사용 .queue() : 두 명령 모두 즉시 Future을 수신하십시오. 두 서비스 호출은 병렬로 실행됩니다. 그런 다음 .get()을 사용하여 결과를 검색하십시오. 결과가 나타날 때까지 이러한 호출이 차단됩니다. 총 실행 시간은 이전보다 빠릅니다. 실행 시간은 가장 긴 서비스 호출 길이가됩니다. 두 서비스의 결과를 결합하려는 경우에 사용하십시오. 두 호출이 병렬로 실행 되더라도 프로그램의 주요 흐름은 여전히 ​​선형입니다.

.subscribe() : 두 명령 모두 즉시 Observable을 수신하십시오. 두 서비스 호출은 병렬로 실행됩니다. 그런 다음 .subscribe()을 사용하여 사용 가능한 경우 결과에 대한 조치를 취하기 위해 콜백을 등록하십시오. 결과를 결합하지 않고 서비스 A와 B가 도착하면 결과에 독립적으로 반응하기를 원할 때 매우 유용합니다. 프로그램의 주요 흐름은 선형 적이 지 않지만 반응이 없습니다. 프로그램의 흐름은 각 명령에 대한 콜백 내부에서 계속됩니다.

도움이되기를 바랍니다.

+0

maxQueueSize https://github.com/Netflix/Hystrix/wiki/Configuration#ThreadPool 속성에 대해 설명 할 수 있습니까? 이 속성을 지정할 때 내 이해할 때 호출 스레드에서 Hystrix 스레드 풀의 스레드 중 하나를 전달하는 데 사용되는 큐 maxQueueSize 크기가 지정됩니다? 그렇다면이 값을 충분히 크게 지정하면 RejectedExecutionException을 받아야합니까? – timpham