177.12. request-reply over JMS
Camel은 JMS를 통해 Request Reply를 지원합니다. 기본적으로 Exchange의 MEP는 JMS 대기열로 메시지를 보낼 때 InOut 이어야 합니다.
Camel은 성능 및 클러스터형 환경에 영향을 주는 JMS를 통해 요청/복제본을 구성할 수 있는 다양한 옵션을 제공합니다. 아래 표는 옵션을 요약합니다.
| 옵션 | 성능 | Cluster | 설명 |
|---|---|---|---|
|
| 신속 (Fast) | 있음 |
임시 큐는 응답 큐로 사용되며 Camel에 의해 자동으로 생성됩니다. 이 기능을 사용하려면 replyTo 큐 이름을 지정하지 않습니다. 또한 필요에 따라 |
|
| slow | 있음 |
공유 영구 대기열은 응답 대기열로 사용됩니다. 일부 브로커는 Apache ActiveMQ와 같이 즉시 생성할 수 있지만 대기열을 사전에 생성해야 합니다. 이를 사용하려면 replyTo 큐 이름을 지정해야 합니다. 또한 필요에 따라 |
|
| 신속 (Fast) | 없음* 예) |
전용 영구 대기열은 응답 큐로 사용됩니다. 일부 브로커는 Apache ActiveMQ와 같이 즉시 생성할 수 있지만 대기열을 사전에 생성해야 합니다. 이를 사용하려면 replyTo 큐 이름을 지정해야 합니다. 또한 |
|
| 신속 (Fast) | 있음 |
Camel 2.10.3: 동시 메시지 리스너를 사용하여 응답 메시지를 동시에 처리할 수 있습니다. |
|
| 신속 (Fast) | 있음 |
Camel 2.10.3: 동시 메시지 리스너를 사용하여 응답 메시지를 동시에 처리할 수 있습니다. |
JmsProducer 는 InOut 을 감지하고 사용할 응답 대상과 함께 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);
from(xxx)
.inOut().to("activemq:queue:foo")
.threads(5)
.to(yyy)
.to(zzz);
이 경로에서 Camel이 스레드가 5개인 스레드 풀을 사용하여 비동기적으로 응답을 라우팅하도록 지시합니다.
Camel 2.10.3 이후부터는 동시 소비자 및 maxConcurrent 스레드를 사용하도록 리스너를 구성할 수 있습니다. 이렇게 하면 다음과 같이 Camel에서 더 쉽게 구성할 수 있습니다.
Consumers 옵션을 사용하여 동시
from(xxx)
.inOut().to("activemq:queue:foo?concurrentConsumers=5")
.to(yyy)
.to(zzz);
from(xxx)
.inOut().to("activemq:queue:foo?concurrentConsumers=5")
.to(yyy)
.to(zzz);