177.12. request-reply over JMS


Camel은 JMS를 통해 Request Reply를 지원합니다. 기본적으로 Exchange의 MEP는 JMS 대기열로 메시지를 보낼 때 InOut 이어야 합니다.

Camel은 성능 및 클러스터형 환경에 영향을 주는 JMS를 통해 요청/복제본을 구성할 수 있는 다양한 옵션을 제공합니다. 아래 표는 옵션을 요약합니다.

Expand
옵션성능Cluster설명

임시

신속 (Fast)

있음

임시 큐는 응답 큐로 사용되며 Camel에 의해 자동으로 생성됩니다. 이 기능을 사용하려면 replyTo 큐 이름을 지정하지 않습니다. 또한 필요에 따라 replyToType=Temporary 를 구성하여 임시 대기열을 사용할 수 있습니다.

shared

slow

있음

공유 영구 대기열은 응답 대기열로 사용됩니다. 일부 브로커는 Apache ActiveMQ와 같이 즉시 생성할 수 있지만 대기열을 사전에 생성해야 합니다. 이를 사용하려면 replyTo 큐 이름을 지정해야 합니다. 또한 필요에 따라 replyToType=Shared 를 구성하여 공유 대기열이 사용 중인 것을 확인할 수 있습니다. 공유 대기열은 이 Camel 애플리케이션을 동시에 실행하는 여러 노드가 있는 클러스터형 환경에서 사용할 수 있습니다. 모두 동일한 공유 응답 큐를 사용합니다. JMS Message 선택기는 예상 응답 메시지의 상관 관계를 유지하는 데 사용될 수 있지만 이는 성능에 영향을 미치기 때문입니다. JMS 메시지 선택기가 느리 기 때문에 임시 또는 제외 대기열 만큼 빠르지 않습니다. 더 나은 성능을 위해 이 설정을 조정하는 방법은 다음과 같습니다.

배타적입니다.

신속 (Fast)

없음* 예)

전용 영구 대기열은 응답 큐로 사용됩니다. 일부 브로커는 Apache ActiveMQ와 같이 즉시 생성할 수 있지만 대기열을 사전에 생성해야 합니다. 이를 사용하려면 replyTo 큐 이름을 지정해야 합니다. 또한 replyTo Type=Exclusive이라는 replyToType=Exclusive 을 구성하여 replyToType=Exclusive 이름이 구성된 경우 기본적으로 Shared 를 사용하도록 Camel에 배타적 큐를 사용하도록 지시 해야 합니다. 전용 응답 대기열을 사용하는 경우 JMS Message 선택기가 사용되지 않으므로 다른 애플리케이션에서도 이 대기열을 사용하지 않아야 합니다. 이 Camel 애플리케이션을 실행하는 여러 노드가 있는 클러스터된 큐를 동시에 실행하는 클러스터형 환경에서 사용할 수 없습니다. 응답 큐가 요청 메시지를 보낸 동일한 노드로 다시 제공되는지 제어하지 않으므로 공유 대기열에서 JMS Message selectors를 사용하여 이를 확인하는 이유입니다. 각 Exclusive 응답 큐를 노드당 고유한 이름으로 구성하는 경우 클러스터형 환경에서 이 큐를 실행할 수 있습니다. 그러면 응답 메시지가 지정된 노드에 대해 해당 큐로 다시 전송되어 응답 메시지를 대기합니다.

concurrentConsumers

신속 (Fast)

있음

Camel 2.10.3: 동시 메시지 리스너를 사용하여 응답 메시지를 동시에 처리할 수 있습니다. 동시Consumers 및 maxConcurrentConsumers 옵션을 사용하여 범위를 지정할 수 있습니다. 알림: 공유 응답 대기열을 사용하는 것은 동시 리스너와 함께 작동하지 않을 수 있으므로 이 옵션을 주의해서 사용하십시오.

maxConcurrentConsumers

신속 (Fast)

있음

Camel 2.10.3: 동시 메시지 리스너를 사용하여 응답 메시지를 동시에 처리할 수 있습니다. 동시Consumers 및 maxConcurrentConsumers 옵션을 사용하여 범위를 지정할 수 있습니다. 알림: 공유 응답 대기열을 사용하는 것은 동시 리스너와 함께 작동하지 않을 수 있으므로 이 옵션을 주의해서 사용하십시오.

JmsProducerInOut 을 감지하고 사용할 응답 대상과 함께 JMSReplyTo 헤더를 제공합니다. 기본적으로 Camel은 임시 대기열을 사용하지만 엔드포인트에서 replyTo 옵션을 사용하여 고정 응답 큐를 지정할 수 있습니다(고정 응답 대기열에 대한 자세한 내용 참조).

Camel은 응답 대기열에서 수신 대기하는 소비자를 자동으로 설정하므로 아무것도 수행하지 않아야 합니다.
이 소비자는 응답을 수신하는 Spring DefaultMessageListenerContainer 입니다. 그러나 이것은 1 개의 동시 소비자로 고정되어 있습니다.
즉 응답을 처리하기 위한 스레드가 1개뿐이므로 응답이 순서대로 처리됩니다. 응답을 더 빠르게 처리하려는 경우 동시성을 사용해야 합니다. 그러나 concurrentConsumer 옵션을 사용하지 않습니다. 아래 경로에 표시된 대로 Camel DSL의 스레드 를 대신 사용해야 합니다.

Camel 2.10.3 이상을 사용하는 경우 스레드를 사용하는 대신 동시Consumers 옵션을 사용합니다. 아래를 참조하십시오.

from(xxx)
.inOut().to("activemq:queue:foo")
.threads(5)
.to(yyy)
.to(zzz);
Copy to Clipboard Toggle word wrap

이 경로에서 Camel이 스레드가 5개인 스레드 풀을 사용하여 비동기적으로 응답을 라우팅하도록 지시합니다.

Camel 2.10.3 이후부터는 동시 소비자 및 maxConcurrent Consumers 옵션을 사용하여 동시 스레드를 사용하도록 리스너를 구성할 수 있습니다. 이렇게 하면 다음과 같이 Camel에서 더 쉽게 구성할 수 있습니다.

from(xxx)
.inOut().to("activemq:queue:foo?concurrentConsumers=5")
.to(yyy)
.to(zzz);
Copy to Clipboard Toggle word wrap

177.12.1. request-reply over JMS 및 공유 고정 응답 대기열 사용

아래 예제와 같이 Request Reply over JMS를 수행할 때 고정 응답 큐를 사용하는 경우 주의하십시오.

from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar")
.to(yyy)
Copy to Clipboard Toggle word wrap

이 예에서는 "bar"라는 고정 응답 큐가 사용됩니다. 기본적으로 Camel은 고정 응답 대기열을 사용할 때 큐가 공유되므로 JMSSelector 를 사용하여 예상되는 응답 메시지(예: JMSCorrelationID)를만 선택합니다. 고정 응답 대기열의 다음 섹션을 참조하십시오. 즉, 임시 대기열만큼 빠르지 않습니다. receiveTimeout 옵션을 사용하여 Camel이 응답 메시지를 가져올 빈도를 높일 수 있습니다. 기본적으로 1000밀리코어입니다. 이렇게 하면 다음과 같이 초당 4번을 가져오기 위해 250밀리코어로 설정할 수 있습니다.

from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&receiveTimeout=250")
.to(yyy)
Copy to Clipboard Toggle word wrap

이렇게 하면 Camel이 메시지 브로커에 풀 요청을 더 자주 전송하므로 네트워크 트래픽이 더 많이 필요합니다.
가능한 경우 일반적으로 임시 대기열을 사용하는 것이 좋습니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat