티스토리 뷰

Skill/spring

FeignClient -feign.RetryableException

진열사랑 2025. 6. 10. 15:16

feign.RetryableException: Read timed out 에러는 FeignClient가 서버로부터 응답을 받기까지 일정 시간 이상 걸려서 타임아웃이 발생했음을 의미합니다.


✅ Feign의 기본 timeout 설정

Spring Cloud OpenFeign의 기본 타임아웃 값은 다음과 같습니다:

설정 기본값

connectTimeout 10초 (10000ms)
readTimeout 60초 (60000ms)

하지만 이 값은 환경 또는 라이브러리 버전에 따라 다를 수 있으니, 명시적으로 설정해주는 것이 좋습니다.


✅ Feign timeout 늘리기 (Spring Boot 기준)

application.yml 또는 application.properties에서 아래와 같이 설정할 수 있습니다.

📘 application.yml 예시:

feign:
  client:
    config:
      default:  # 또는 특정 client name
        connectTimeout: 5000     # 5초
        readTimeout: 120000      # 120초 (2분)
        loggerLevel: full        # (선택) 로깅 자세히 보기

📘 application.properties 예시:

feign.client.config.default.connectTimeout=5000
feign.client.config.default.readTimeout=120000
feign.client.config.default.loggerLevel=full

default 대신 특정 FeignClient 이름을 넣으면 그 client에만 적용됩니다.


✅ 추가: Retry 제거 (불필요한 재시도 방지)

Feign은 일부 예외에 대해 자동 재시도를 시도할 수 있습니다.
네트워크 타임아웃이 반복되면 재시도는 오히려 문제를 키울 수 있습니다.

feign:
  client:
    config:
      default:
        retryer:
          # No retry (Retryer.NEVER_RETRY equivalent)
          period: 0
          maxPeriod: 0
          maxAttempts: 1

또는 Java config에서 완전히 비활성화할 수도 있습니다:

@Bean
public Retryer neverRetry() {
    return Retryer.NEVER_RETRY;
}

✅ 참고

  • connectTimeout: 서버에 연결할 때까지 대기 시간 (예: 서버가 다운되었거나 연결이 느릴 때)
  • readTimeout: 서버 응답을 기다리는 시간 (예: 처리 시간이 긴 API 호출 시)

--------

실제 적용.

 

feign:
  client:
    config:
      flaskserver:
        connectTimeout: 3000       # 3초
        readTimeout: 1800000       # 30분
      geoserver:
        connectTimeout: 3000       # 3초
        readTimeout: 10000         # 10초
@FeignClient(name = "flaskserver", url = "${flaskserver.base-url}")
public interface FlaskServerFeignClient {
	
	// 침입수 분석
    @GetMapping(value = "/runInfil")
    FlaskServerResponse callInfiltration(@RequestParam("in_anls_sn") Integer inAnlsSn);
    
    // RDII 분석
    @GetMapping(value = "/runRdii")
    FlaskServerResponse callRdii(@RequestParam("rain_in_anls_sn") Integer rainInAnlsSn);
}

'Skill > spring' 카테고리의 다른 글

FeignClient란  (3) 2025.06.10
Spring Webflux  (0) 2025.06.10
spring] 에러 메시지 반환  (1) 2025.05.29
spring cloud 설정  (0) 2025.05.29
JPA] 설정  (0) 2025.05.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함