복붙노트

[SPRING] 스프링 웹 클라이언트를 멀티 스레드 환경에서 사용하는 올바른 방법

SPRING

스프링 웹 클라이언트를 멀티 스레드 환경에서 사용하는 올바른 방법

Spring WebClient에 관한 한 가지 질문이 있습니다.

내 응용 프로그램에서 많은 유사한 API 호출을 수행해야 할 때가 있는데, 때로는 호출 (인증 토큰)에서 변경 헤더가 필요합니다. 문제가 발생하면 두 가지 옵션 중 무엇이 더 좋을까요?

해결법

  1. ==============================

    1.WebClient에 대한 두 가지 중요한 사항 :

    WebClient에 대한 두 가지 중요한 사항 :

    이를 염두에두고 연결 풀을 공유하기 때문에 동일한 ClientHttpConnector를 응용 프로그램에서 다시 사용해야합니다. 이는 성능면에서 가장 중요한 요소입니다. 즉, 동일한 WebClient.create () 호출에서 모든 WebClient 인스턴스를 파생시켜야합니다. 스프링 부트는 앱의 어느 곳으로나 삽입 할 수있는 WebClient.Builder 빈을 생성하고 구성함으로써이를 지원합니다.

    WebClient는 불변이므로 스레드로부터 안전합니다. WebClient는 반응이없는 환경에서 사용하기위한 것이며 특정 스레드에 아무 것도 연결되어 있지 않습니다 (이것이 일반적인 Servlet 응용 프로그램에서는 사용할 수 없음을 의미하지는 않습니다).

    요청 방법을 변경하려면 다음과 같은 여러 가지 방법이 있습니다.

    WebClient baseClient = WebClient.create().baseUrl("https://example.org");
    
    Mono<ClientResponse> response = baseClient.get().uri("/resource")
                    .header("token", "secret").exchange();
    
    // mutate() will *copy* the builder state and create a new one out of it
    WebClient authClient = baseClient.mutate()
                    .defaultHeaders(headers -> {headers.add("token", "secret");})
                    .build();
    
  2. from https://stackoverflow.com/questions/49095366/right-way-to-use-spring-webclient-in-multi-thread-environment by cc-by-sa and MIT license