검색

11.4. 경쟁 소비자

download PDF

11.4.1. 개요

그림 11.3. “경쟁 소비자 패턴” 에 표시된 경쟁 소비자 패턴을 사용하면 여러 소비자가 동일한 대기열에서 메시지를 가져올 수 있으며 각 메시지가 한 번만 사용됩니다. 이 패턴은 직렬 메시지 처리를 동시 메시지 처리(응답 대기 시간 감소)로 교체하는 데 사용할 수 있습니다.

그림 11.3. 경쟁 소비자 패턴

소비자 패턴 경쟁

다음 구성 요소는 경쟁하는 소비자 패턴을 보여줍니다.

11.4.2. JMS 기반 경쟁 소비자

일반 JMS 대기열은 암시적으로 각 메시지를 한 번에만 사용할 수 있도록 보장합니다. 따라서 JMS 대기열은 경쟁하는 소비자 패턴을 자동으로 지원합니다. 예를 들어 다음과 같이 JMS 대기열인 HighVolumeQ 에서 메시지를 가져오는 경쟁적인 세 소비자를 정의할 수 있습니다.

from("jms:HighVolumeQ").to("cxf:bean:replica01");
from("jms:HighVolumeQ").to("cxf:bean:replica02");
from("jms:HighVolumeQ").to("cxf:bean:replica03");

CXF(Web services) 끝점, replica01,replica02, replica03 인 경우 HighVolumeQ 큐의 메시지를 병렬로 처리합니다.

또는 경쟁하는 소비자의 스레드 풀을 생성하기 위해 JMS 쿼리 옵션인 concurrentConsumers 를 설정할 수 있습니다. 예를 들어 다음 경로는 지정된 대기열에서 메시지를 선택하는 세 가지 경쟁적인 스레드 풀을 생성합니다.

from("jms:HighVolumeQ?concurrentConsumers=3").to("cxf:bean:replica01");

그리고 concurrentConsumers 옵션은 다음과 같이 XML DSL에도 지정할 수 있습니다.

 <route>
   <from uri="jms:HighVolumeQ?concurrentConsumers=3"/>
   <to uri="cxf:bean:replica01"/>
 </route>
참고

JMS 주제는 경쟁하는 소비자 패턴을 지원할 수 없습니다. 정의에 따라 JMS 주제는 동일한 메시지의 여러 복사본을 다른 소비자에 전송하기 위한 것입니다. 따라서 경쟁하는 소비자 패턴과 호환되지 않습니다.

11.4.3. SEDA 기반 경쟁 소비자

SEDA 구성 요소의 목적은 계산을 단계로 분할하여 동시 처리를 단순화하는 것입니다. SEDA 엔드포인트는 기본적으로 메모리 내 차단 대기열을 캡슐화합니다( java.util.concurrent.BlockingQueue). 따라서 SEDA 엔드포인트를 사용하여 각 스테이지에서 여러 스레드를 사용할 수 있는 단계로 경로를 분할할 수 있습니다. 예를 들어 다음과 같이 두 단계로 구성된 SEDA 경로를 정의할 수 있습니다.

// Stage 1: Read messages from file system.
from("file://var/messages").to("seda:fanout");

// Stage 2: Perform concurrent processing (3 threads).
from("seda:fanout").to("cxf:bean:replica01");
from("seda:fanout").to("cxf:bean:replica02");
from("seda:fanout").to("cxf:bean:replica03");

첫 번째 단계에는 파일 끝점, file://var/messages 의 메시지를 사용하고 SEDA 끝점인 seda:fanout 로 라우팅하는 단일 스레드가 포함되어 있습니다. 두 번째 단계에는 cxf:bean:replica01 로 교환을 라우팅하는 스레드, cxf:bean:replica02.로 교환되는 스레드 및 cxf:bean:replica03 으로의 교환을 라우팅하는 스레드의 세 가지 스레드가 포함되어 있습니다. 이 세 개의 스레드는 차단 큐를 사용하여 구현되는 SEDA 엔드포인트에서 교환 인스턴스를 가져오기 위해 경쟁합니다. 차단 대기열은 잠금을 사용하여 두 개 이상의 스레드가 한 번에 큐에 액세스하지 못하도록 하기 때문에 각 교환 인스턴스마다 한 번만 사용할 수 있습니다.

SEDA 엔드포인트와 thread() 에서 생성한 스레드 풀의 차이점에 대한 자세한 내용은 Apache Camel 구성 요소 참조 가이드의 SEDA 구성 요소를 참조하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.