다중 스레드 환경에서 스프링 amqp의 주석 기반 접근 방식을 사용하고 있습니다 (여러 소비자 => 여러 개의 토끼 수신기 컨테이너가 있음).어디에 멀티 스레드 환경에서 수신 rabbitListener 구성 요소 내에 스레드 종속 데이터를 저장해야합니까?
@RabbitListener(queues = "tasks")
public void receiveMessage(@Payload Task task) {
// usage of httpClient here with its own httpContext (would be fine)
// this method gets called from different listenerContainers/threads
}
주석 처리 된 receiveMessage() 메소드가 포함 된 구성 요소는 http http 클라이언트에서 http 호출을해야합니다. 여러 소비자와 동시에 작업하고 있기 때문에이 메서드는 다른 스레드에서 호출되며 apache http 클라이언트 설명서에서는 각 스레드가 스레드로부터 안전하도록 httpContext를 만들어야한다고 말합니다. 모든 스레드가 동일한 구성 요소 메소드를 호출하므로 구성 요소에 httpContext를 넣을 수 없습니다.
httpClientContext를 넣을 수있는 각 리스너 컨테이너에 대한 리스너 컨테이너 컨텍스트가 있습니까? 아니면 누군가가 쉽게 해결할 수있는 아이디어를 가지고 있습니까? 내가 ThreadLocal 또는 httpContexts에 대한 중앙 레지스트리에 대해 생각하지만, 이것이 더 쉬울 것이라고 괜찮을 것입니다.