FeignClient 기반 시간 초과 처리 방안 호출
3903 단어 FeignClient호출시간 을 초과 하 다
문제 의 전제
SpringCloud 간 FeignClient 호출 에 ReadTime Out 이 발생 한 경우
FeignClient 서비스 에서 호출 되 는 기본 시간 초과 시간 은 2 초 입 니 다.
인터넷 검색 솔 루 션
Hystrix 닫 기(유치 한 생각)
시간 초과 연장(Spring 많은 시간 초과 설정 이 많 음)
해결 방안
FeignClient 에 사용자 정의 시간 초과 설정 을 추가 합 니 다.Nacos 와 결합 하여 제어 할 수 있 습 니 다.
말 이 많 지 않 으 면,원본 을 붙인다.
/**
* FeignClient
*
* @author gralves
* @date 2020/8/10
*/
@Component
public class FeignClientConfig {
//
@Value("${service.feign.connectTimeout:60000}")
private int connectTimeout;
//
@Value("${service.feign.readTimeOut:60000}")
private int readTimeout;
//
@Bean
public Request.Options options() {
return new Request.Options(connectTimeout, readTimeout);
}
}
FeignClient 사용자 정의 설정 클래스 사용
// configuration
@FeignClient(value = "xxx", configuration = FeignClientConfig.class)
public interface XxxFeignClient {...
서비스 A/B 를 시작 하여 서비스 호출 을 진행 합 니 다.정지점 59 초(시간 초과 하지 않 음),정지점 60 초(ReadTime Out).설정 이 유효 합 니 다.건의 하 다.
서로 다른 서 비 스 는 서로 다른 시간 초과 시간 을 설정 할 수 있다.
FeignClient 는 공공 공구 꾸러미 로 추출 하여 사용 할 수 있 습 니 다.
결점.
너무 귀찮아 서 디 버 깅 설정 이 귀 찮 으 면 사용 할 수 있어 요~
FeignClient 시간 초과 설정
Feign 은 사실 하나의 포장 입 니 다.복잡 한 Http 요 구 를 우리 가 한두 개의 주석 만 쓰 면 해결 할 수 있 는 지경 으로 포장 합 니 다.그 가 밑바닥 에서 사용 하 는 것 은 역시 리본 이다.
Feign 의 호출 은 모두 두 층 으로 나 뉘 는데 그것 이 바로 Ribbon 의 호출 과 Hystrix(퓨즈 처리)의 호출 입 니 다.높 은 버 전의 Hystrix 는 기본적으로 닫 혔 습 니 다.
Ribbon 시간 초과 설정
위의 그림 의 정보 가 나타 나 면 Ribbon 이 시간 을 초 과 했 음 을 설명 합 니 다.설정 파일 에서 제어 처 리 를 해 야 합 니 다.
### Ribbon
ribbon:
#
ConnectTimeout: 2000
#
ReadTimeout: 5000
Hystrix 시간 초과 설정Hystrix 열기
### Feign
feign:
# ( )
hystrix:
enabled: true
이때 시간 을 초과 하면 오 류 를 보고 합 니 다.기본 Hystrix 시간 초과 설정:
시간 초 과 를 피하 기 위해 서,우 리 는 업무 상황 에 따라 자신의 시간 초 과 를 설정 할 수 있 습 니 다.여기 서 녹 는 시간 은 5000/밀리초 입 니 다.메모:Ribbon 의 시간 초과 시간 이 Hystrix 의 시간 초과 시간 보다 크 지 않도록 권장 합 니 다.
### Hystrix
hystrix:
# Hystrix hook, hook SecurityContext Hystrix 。
# Hystrix Hystrix , HystrixConcurrencyStrategy
# Spring bean 。Spring Cloud Spring , 。
shareSecurityContext: true
command:
default:
circuitBreaker:
# , 。 20
requestVolumeThreshold: 1
# , 5000 , circuit break 5000 request
# 5000 circuit。 5000
sleepWindowInMilliseconds: 15000
# , , request, false
forceOpen: false
# ,circuit , false
forceClosed: false
execution:
isolation:
thread:
# , :1000/
timeoutInMilliseconds: 5000
원본 코드:https://github.com/SlowSlicing/demo-spring-cloud-finchley/tree/FeignClientTimeoutConfiguration이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python이 함수 이름을 통해 함수를 호출하는 몇 가지 장면설명 앞서 시스템 명령을 어떻게 실행하는지 라고 썼다. 시스템 명령을 실행하는 것 외에 우리는 때때로 동적으로python 코드를 실행해야 한다. 경험이 있는 친구들은 내장 함수 eval을 사용하여 이 수요를 실현할 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.