177.9. 런타임 시 끝점을 재사용하고 계산된 다른 대상으로 보냅니다.
많은 다른 JMS 대상에 메시지를 보내야 하는 경우 JMS 엔드포인트를 재사용하고 메시지 헤더에서 실제 대상을 지정하는 것이 좋습니다. 이를 통해 Camel은 동일한 엔드포인트를 재사용할 수 있지만 다른 대상으로 보낼 수 있습니다. 이렇게 하면 생성되는 끝점 수와 메모리 및 스레드 리소스에 대한 일관성을 크게 줄일 수 있습니다.
다음 헤더에 대상을 지정할 수 있습니다.
header | 유형 | 설명 |
---|---|---|
|
| 대상 오브젝트입니다. |
|
| 대상 이름입니다. |
예를 들어 다음 경로는 런타임에 대상을 계산하고 이를 사용하여 JMS URL에 표시되는 대상을 재정의하는 방법을 보여줍니다.
from("file://inbox") .to("bean:computeDestination") .to("activemq:queue:dummy");
큐 이름인 dummy
는 자리 표시자일 뿐입니다. JMS 엔드포인트 URL의 일부로 제공해야 하지만 이 예제에서는 무시됩니다.
computeDestination
빈에서 다음과 같이 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
Name 헤더와 CamelJmsDestinationName
헤더를 모두 제거하고 경로의 실수로 루프를 방지하기 위해 생성된 JMS 메시지로 전파하지 않습니다(메시지가 다른 JMS 끝점으로 전달되는 시나리오).