178.20. 샘플
JMS는 다른 구성 요소에도 많은 예에서 사용됩니다. 그러나 시작하기 위해 아래에 몇 가지 샘플을 제공합니다.
178.20.1. JMS에서 수신
다음 샘플에서는 JMS 메시지를 수신하고 메시지를ECDHE로 라우팅하는 경로를 구성합니다.
from("jms:queue:foo"). to("bean:myBusinessLogic");
물론 경로를 기반으로 할 수 있도록 모든 EIP 패턴을 사용할 수 있습니다. 예를 들어, 큰 소비자에 대한 순서 주제를 필터링하는 방법은 다음과 같습니다.
from("jms:topic:OrdersTopic"). filter().method("myBean", "isGoldCustomer"). to("jms:queue:BigSpendersQueue");
178.20.2. JMS로 전송
아래 샘플에서 파일 폴더를 폴링하고 파일 내용을 JMS 주제로 보냅니다. Bytes
로 파일의 내용을 원하는 경우 본문을 문자열로 변환해야 합니다. Message
대신 textMessage
from("file://orders"). convertBodyTo(String.class). to("jms:topic:OrdersTopic");
178.20.3. 주석 사용
Camel에는 또한 annotations가 있으므로ECDHE Consuming 및ECDHE Producing을 사용할 수 있습니다.
178.20.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>
178.20.5. 기타 샘플
JMS는 다른 구성 요소 및 EIP 패턴의 많은 예와 이 Camel 설명서에서 나타납니다. 따라서 문서를 자유롭게 검색할 수 있습니다. 시간이 있는 경우 JMS를 사용하지만 Spring Remoting 및 Camel이 튜토리얼-JmsRemoting의 작동 방식에 중점을 두는 이 튜토리얼을 확인하십시오.
178.20.6. JMS를 교환을 저장하는 Dead Letter Queue로 사용
일반적으로 JMS 를 전송으로 사용할 때 본문과 헤더만 페이로드로 전송합니다. JMS 대기열을 Dead Letter Queue로 사용하여 Dead Letter Channel 과 함께 JMS를 사용하려는 경우 일반적으로 caused exception이 JMS 메시지에 저장되지 않습니다. 그러나 JMS dead letter 대기열의 transferExchange
옵션을 사용하여 Camel에 org.apache.camel.impl.DefaultExchangeHolder
가 있는 javax.jms.ObjectMessage
로 전체 Exchange를 저장하도록 지시할 수 있습니다. 이를 통해 Dead Letter Queue에서 사용하고 Exchange 속성에서 발생한 예외를 Exchange.EXCEPTION_CAUGHT
키로 검색할 수 있습니다. 아래 데모는 다음을 보여줍니다.
// 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();
178.20.7. JMS를 Dead Letter Channel로만 사용
JMS를 사용하여 원인 오류 메시지를 저장하거나 직접 초기화할 수 있는 사용자 정의 본문을 저장할 수 있습니다. 다음 예제에서는 메시지 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");
여기에서는 원본 원인 오류 메시지만 변환에 저장합니다. 그러나 모든 표현식을 사용하여 원하는 대로 보낼 수 있습니다. 예를 들어 빈에서 메서드를 호출하거나 사용자 지정 프로세서를 사용할 수 있습니다.