두 개의 서비스 호출 A와 B를 HystrixCommand
으로 랩했다고 가정합시다. 이제 세 가지 옵션이 있습니다.
.execute()
: 순수 동기 호출. 결과가 도착하면 메서드를 호출하고 프로그램을 계속 진행합니다. 프로그램의 총 실행 시간은 두 호출의 합계입니다. 프로그램의 주요 흐름은 매우 직선적입니다.
사용 .queue()
: 두 명령 모두 즉시 Future
을 수신하십시오. 두 서비스 호출은 병렬로 실행됩니다. 그런 다음 .get()
을 사용하여 결과를 검색하십시오. 결과가 나타날 때까지 이러한 호출이 차단됩니다. 총 실행 시간은 이전보다 빠릅니다. 실행 시간은 가장 긴 서비스 호출 길이가됩니다. 두 서비스의 결과를 결합하려는 경우에 사용하십시오. 두 호출이 병렬로 실행 되더라도 프로그램의 주요 흐름은 여전히 선형입니다.
.subscribe()
: 두 명령 모두 즉시 Observable
을 수신하십시오. 두 서비스 호출은 병렬로 실행됩니다. 그런 다음 .subscribe()
을 사용하여 사용 가능한 경우 결과에 대한 조치를 취하기 위해 콜백을 등록하십시오. 결과를 결합하지 않고 서비스 A와 B가 도착하면 결과에 독립적으로 반응하기를 원할 때 매우 유용합니다. 프로그램의 주요 흐름은 선형 적이 지 않지만 반응이 없습니다. 프로그램의 흐름은 각 명령에 대한 콜백 내부에서 계속됩니다.
도움이되기를 바랍니다.
maxQueueSize https://github.com/Netflix/Hystrix/wiki/Configuration#ThreadPool 속성에 대해 설명 할 수 있습니까? 이 속성을 지정할 때 내 이해할 때 호출 스레드에서 Hystrix 스레드 풀의 스레드 중 하나를 전달하는 데 사용되는 큐 maxQueueSize 크기가 지정됩니다? 그렇다면이 값을 충분히 크게 지정하면 RejectedExecutionException을 받아야합니까? – timpham