일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Gradle
- 달팽이
- 구간 트리
- 비트마스킹
- 스프링 시큐리티
- BFS
- spring cloud
- 메모이제이션
- Spring Cloud Config
- docker-compose
- 이분 매칭
- 트리
- dp
- 서비스 디스커버리
- 주울
- 스택
- 유레카
- 도커
- Zuul
- 백트래킹
- Logback
- 다익스트라
- spring boot
- 이분 탐색
- 완전 탐색
- ZuulFilter
- Java
- 구현
- 플로이드 와샬
- 게이트웨이
- Today
- Total
Hello, Freakin world!
[Zuul] 서비스 타임아웃 지정하기 본문
서비스 타임아웃은 리본과 히스트릭스 각각 지정할 수 있습니다.
기본적으로 주울은 1초 이상 걸리는 호출을 종료하고 HTTP 504 에러를 반환합니다. 이는 히스트릭스에서 걸리는 타임아웃입니다.
(유레카에 등록된 서비스는 기본적으로 이와 같이 동작하지만 그렇지 않은 경우엔 히스트릭스 설정을 따로 추가해야 됩니다.)
리본에서도 타임아웃을 지정할 수 있습니다. 기본값은 5000ms 입니다.
만약 5초 이상의 타임아웃을 지정하려면 리본의 기본값이 5초이기 때문에 리본에도 타임아웃을 새로 지정해야 합니다.
히스트릭스에서 타임아웃 지정
다음의 코드를 applicatoin.yml에 추가합니다.
hystrix:
command:
default:
excution.isolation.thread.timeoutInMilliseconds: 1000
히스트릭스 타임아웃은 1초로 변경했습니다.
만약 서비스 별로 타임아웃을 다르게 하고 싶다면 먼저 isolation 정책을 스레드풀 방식으로 바꿔야합니다.(기본 방식은 세마포어 방식입니다.) 그리고 default 대신 서비스 id를 지정하면 됩니다.
리본에서의 타임아웃 지정
일단 서비스를 두 가지로 구분합니다.
1. 유레카에 등록된 서비스
2. 유레카에 등록되지 않은 서비스
1. 유레카에 등록된 서비스
아래의 코드를 application.yml에 추가합니다.
ribbon:
ReadTimeout: 2000
SocketTimeout: 2000
2. 유레카에 등록되지 않은 서비스
아래의 코드를 application.yml에 추가합니다.
zuul:
host:
connect-timeout-millis: 2000
socket-timeout-millis: 2000
타임아웃을 2초로 변경했습니다.
참고: ReadTimeout, connect-timeout-millis이 socket-timeout-millis 뭐가 다른걸까요?
유레카에 등록된 서비스에서 ReadTimeout, SocketTimeout 둘 중 하나의 값만 있더도 제대로 동작했습니다.
하지만 유레카에 등록되지 않은 경우 connection-timeout-millis 값은 적용되지 않고, socket-timeout-millis 값만
적용됐습니다.
둘을 구분해서 다른 값을 주기보단 그냥 속편하게 같은 값을 모두 주고 사용하시는게 속편할 듯.
'Spring Cloud > Gateway' 카테고리의 다른 글
[Zuul] route 타입 필터 작성 - A/B 테스팅 구현하기 (0) | 2021.03.13 |
---|---|
[Zuul] pre 타입 필터 작성하기 - 요청 서비스 ID 부여하기 (0) | 2021.03.13 |
[Zuul] Zuul 필터의 4가지 타입 (0) | 2021.03.13 |
[Zuul] 경로 라우팅하기 (0) | 2021.03.11 |
[Zuul] 스프링 클라우드 Zuul 시작하기 (0) | 2021.03.11 |