Spring Cloud 구성 요소 feign 비동기 호출 HttpRequest 를 null 로 가 져 오기
Spring Cloud 분포 식 시스템 에서 마이크로 서비스 간 의 feign 호출 은 권한 을 부여 하고 매개 변수 전달 을 요청 해 야 합 니 다. 이 때 feign. RequestInterceptor 를 실현 하여 token 또는 session, params 매개 변수 등 을 목표 마이크로 서비스 에 전달 해 야 합 니 다.
HttpRequest 대상 을 어떻게 가 져 옵 니까?
public class ZuulCustomFeignClientConfig implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String access_token = request.getParameter("access_token");
Map> queries = requestTemplate.queries();
Map> newMaP = Maps.newLinkedHashMap();
newMaP.putAll(queries);
Collection param = Lists.newArrayList();
param.add(access_token);
newMaP.put("access_token", param);
이 때 가 져 온 request 는 비동기 호출 을 시작 할 때 null 에 게 물 어 보 는 상황 이 발생 합 니 다. 문제 가 발생 한 이 유 는 무엇 입 니까?
HttpRequest 를 null 로 가 져 온 이유
다른 스 레 드 비동기 호출 feign 을 엽 니 다. http Request 는 ThreadLocal 에 연결 되 어 있 기 때문에 현재 스 레 드 에서 만 공유 할 수 있 습 니 다. 하위 스 레 드 는 부모 스 레 드 의 속성 을 가 져 올 수 없습니다.
feign 스 레 드 공유 어떻게 해결 합 니까?
프로젝트 는 부모 스 레 드 에서 Request ContextHolder 설정
public static void setRequestAttributes(@Nullable RequestAttributes attributes) { setRequestAttributes(attributes, false); }
을 가 져 오 면 원본 코드 를 읽 을 수 있 습 니 다. 사실은 사용 하 는 것 은? public static void setRequestAttributes(@Nullable RequestAttributes attributes, boolean inheritable) {
if (attributes == null) {
resetRequestAttributes();
} else if (inheritable) {
inheritableRequestAttributesHolder.set(attributes);
requestAttributesHolder.remove();
} else {
requestAttributesHolder.set(attributes);
inheritableRequestAttributesHolder.remove();
}
}
inheritable RequestAttributes Holder 는 NamedInheritable ThreadLocal 로 스 레 드 간 공 유 를 실현 할 수 있 습 니 다.
총결산
feign 비동기 호출 문제 가 많 습 니 다. 사용 할 때 주 의 를 기울 여야 합 니 다. 동시에 Hstrix 를 열 때 feign 의 첫 번 째 요청 이 실 패 했 을 때 (spring 은 게 으 른 로 딩 형식 을 사용 합 니 다) 어떻게 처리 합 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.