Spring Cloud 구성 요소 feign 비동기 호출 HttpRequest 를 null 로 가 져 오기

2323 단어 SpringCloudfeign
HttpRequest 필드 가 져 오기
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 은 게 으 른 로 딩 형식 을 사용 합 니 다) 어떻게 처리 합 니까?

좋은 웹페이지 즐겨찾기