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");

여기에서는 원본 원인 오류 메시지만 변환에 저장합니다. 그러나 모든 표현식을 사용하여 원하는 대로 보낼 수 있습니다. 예를 들어 빈에서 메서드를 호출하거나 사용자 지정 프로세서를 사용할 수 있습니다.