178.11. 끝점을 재사용하고 런타임 시 계산되는 다른 대상에 전송
많은 다른 JMS 대상에 메시지를 보내야 하는 경우 JMS 끝점을 재사용하고 메시지 헤더에 실제 대상을 지정하는 것이 좋습니다. 이를 통해 Camel은 동일한 끝점을 재사용하지만 다른 대상으로 전송할 수 있습니다. 이렇게 하면 생성된 끝점 수를 크게 줄이고 메모리 및 스레드 리소스를 조정할 수 있습니다.
다음 헤더에서 대상을 지정할 수 있습니다.
| header | 유형 | 설명 |
|---|---|---|
|
|
| 대상 오브젝트입니다. |
|
|
| 대상 이름입니다. |
예를 들어 다음 경로는 런타임 시 대상을 계산하고 이를 사용하여 JMS URL에 표시되는 대상을 재정의하는 방법을 보여줍니다.
from("file://inbox")
.to("bean:computeDestination")
.to("activemq:queue:dummy");
큐 이름 dummy 는 자리 표시자일 뿐입니다. JMS 엔드포인트 URL의 일부로 제공해야 하지만 이 예제에서는 무시됩니다.
computeDestination Bean에서 CamelJmsDestinationName 헤더를 다음과 같이 설정하여 실제 대상을 지정합니다.
public void setJmsHeader(Exchange exchange) {
String id = ....
exchange.getIn().setHeader("CamelJmsDestinationName", "order:" + id");
}
그러면 Camel이 이 헤더를 읽고 엔드포인트에 구성된 헤더 대신 대상으로 사용합니다. 따라서 이 예에서 Camel은 id 값이 2라고 가정하여 activemq:queue:order:2 로 메시지를 보냅니다.
CamelJmsDestination 및 CamelJmsDestinationName 헤더가 모두 설정된 경우 CamelJmsDestination 이 우선합니다. JMS 생산자는 교환에서 CamelJmsDestination 및 CamelJmsDestinationName 헤더를 모두 제거하고 경로의 실수로 루프를 방지하기 위해 생성된 JMS 메시지에 전파하지 않습니다(메시지가 다른 JMS 엔드포인트로 전달되는 경우).