...
- [product] ProductController의 throw Exception을 Thread.sleep(2000)로 수정
Code Block @RestController @RequestMapping("/products") public class ProductController { @GetMapping(path = "{productId}") public String getProductInfo(@PathVariable String productId) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return "[product id = " + productId + " at " + System.currentTimeMillis() + "]"; //throw new RuntimeException("I/O Exception"); } }
- [display] application.yml 수정하여 Hystrix Timeout 시간 조정하기
Code Block hystrix: command: default: # command key. use 'default' for global setting. execution: isolation: thread: timeoutInMilliseconds: 1000
- Display → Product 호출 하기
Info icon false Code Block 2020-02-25 12:12:54.768 INFO 92144 --- [io-8081-exec-10] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-02-25 12:12:54.769 INFO 92144 --- [io-8081-exec-10] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-02-25 12:12:54.857 INFO 92144 --- [io-8081-exec-10] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 88 ms t = com.netflix.hystrix.exception.HystrixTimeoutException
- 정리
Info icon false - Hystrix를 통해 실행 되는 모든 메소드는 정해진 응답시간 내에 반환 되어야 한다.
- 그렇지 못한 경우, Exception이 발생하며, Fallback이 정의된 경우 수행된다.
- Timeout 시간은 조절할 수 있다. (Circuit 별로 세부 수정 가능하며 뒷 부분에 설명)
- 언제 유용한가 ?
- 항상 !!
- 모든 외부 연동은 최대 응답 시간을 가정할 수 있어야 한다.
- 여러 연동을 사용하는 경우 최대 응답시간을 직접 Control하는 것은 불가능하다 (다양한 timeout, 다양한 지연등..)
...