179.6. Samples
JMS는 다른 구성 요소에도 많은 예제에서 사용됩니다. 그러나 시작하기 위해 아래에 몇 가지 샘플을 제공합니다.
179.6.1. JMS에서 수신
다음 샘플에서는 JMS 메시지를 수신하고 메시지를 Cryostat로 라우팅하는 경로를 구성합니다.
from("jms:queue:foo"). to("bean:myBusinessLogic");
물론 경로를 기반으로 경로를 사용할 수 있도록 EIP 패턴을 사용할 수 있습니다. 예를 들어 큰 소비자를 위해 주문 주제를 필터링하는 방법은 다음과 같습니다.
from("jms:topic:OrdersTopic"). filter().method("myBean", "isGoldCustomer"). to("jms:queue:BigSpendersQueue");
179.6.2. JMS로 전송
아래 샘플에서는 파일 폴더를 폴링하고 JMS 주제로 파일 콘텐츠를 보냅니다. 파일 내용을 Cryostats Message 대신 textMessage
로 변환하려면 본문을 String
으로 변환해야합니다.
from("file://orders"). convertBodyTo(String.class). to("jms:topic:OrdersTopic");
179.6.3. 주석 사용
Camel에는 주석도 있으므로 Cryostat 사용 및 Cryostat Producing을 사용할 수 있습니다.
179.6.4. Spring DSL 샘플
위의 예제에서는 Java DSL을 사용합니다. Camel은 Spring XML DSL도 지원합니다. Spring DSL을 사용하는 큰 소비 샘플은 다음과 같습니다.
<route> <from uri="jms:topic:OrdersTopic"/> <filter> <method bean="myBean" method="isGoldCustomer"/> <to uri="jms:queue:BigSpendersQueue"/> </filter> </route>
179.6.5. 기타 샘플
JMS는 이 Camel 설명서뿐만 아니라 다른 구성 요소 및 EIP 패턴에 대한 많은 예에 나타납니다. 따라서 문서를 자유롭게 검색할 수 있습니다.
179.6.6. Exchange를 저장하는 dead Letter Queue로 JMS 사용
일반적으로 JMS 를 전송으로 사용하는 경우 본문 및 헤더만 페이로드로 전송합니다. dead Letter Channel 과 함께 JMS 큐를 사용하려는 경우 JMS 대기열을 Dead Letter Queue로 사용하면 일반적으로 발생한 예외가 JMS 메시지에 저장되지 않습니다. 그러나 JMS dead letter 큐에서 transferExchange
옵션을 사용하여 Camel에 전체 Exchange를 queue에 저장하도록 지시할 수 있습니다. javax.jms.ObjectMessage
는 org.apache.camel.impl.DefaultExchangeHolder
. 이를 통해 dead Letter Queue에서 소비하고 Exchange.EXCEPTION_CAUGHT
키를 사용하여 Exchange 속성에서 발생한 예외를 검색할 수 있습니다. 아래 데모는 다음을 보여줍니다.
// setup error handler to use JMS as queue and store the entire Exchange errorHandler(deadLetterChannel("jms:queue:dead?transferExchange=true"));
그런 다음 JMS 큐에서 소비하고 문제를 분석할 수 있습니다.
from("jms:queue:dead").to("bean:myErrorAnalyzer"); // and in our bean String body = exchange.getIn().getBody(); Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class); // the cause message is String problem = cause.getMessage();
179.6.7. 오류만 저장하는 dead Letter Channel으로 JMS 사용
JMS를 사용하여 원인 오류 메시지를 저장하거나 자신을 초기화할 수 있는 사용자 지정 본문을 저장할 수 있습니다. 다음 예제에서는 Message#159 EIP를 사용하여 JMS dead letter 큐로 이동하기 전에 실패한 교환에서 변환을 수행합니다.
// we sent it to a seda dead queue first errorHandler(deadLetterChannel("seda:dead")); // and on the seda dead queue we can do the custom transformation before its sent to the JMS queue from("seda:dead").transform(exceptionMessage()).to("jms:queue:dead");
여기에서 원본 원인 오류 메시지를 변환에 저장합니다. 그러나 모든 Expression을 사용하여 원하는 것을 보낼 수 있습니다. 예를 들어 Cryostat에서 메서드를 호출하거나 사용자 지정 프로세서를 사용할 수 있습니다.
179.6.8. JMS를 사용하여 소비자 우선 순위 지정
일부 브로커(및 특히 Artemis)를 사용하면 전송 중인 메시지에 대한 소비자 우선 순위를 지정할 수 있습니다. 다음 샘플에서는 artemisConsumerPriority
속성을 사용하여 우선 순위에 따라 메시지를 변환합니다.
<camelContext id="jms-basic-consumer-priority" xmlns="http://camel.apache.org/schema/spring" autoStartup="true"> <endpoint id="highPriorityQueue" uri="jms:queue:inputQueue?artemisConsumerPriority=1000"/> <endpoint id="mediumPriorityQueue" uri="jms:queue:inputQueue?artemisConsumerPriority=500"/> <endpoint id="lowPriorityQueue" uri="jms:queue:inputQueue?artemisConsumerPriority=1"/> <endpoint id="resultQueue" uri="jms:queue:outputQueue"/> <route> <from uri="ref:highPriorityQueue"/> <transform> <simple>High</simple> </transform> <to uri="ref:resultQueue"/> </route> <route> <from uri="ref:mediumPriorityQueue"/> <transform> <simple>Medium</simple> </transform> <to uri="ref:resultQueue"/> </route> <route> <from uri="ref:lowPriorityQueue"/> <transform> <simple>Low</simple> </transform> <to uri="ref:resultQueue"/> </route> </camelContext>