8.14. 구성된 메시지 프로세서
8.14.1. 구성된 메시지 프로세서
그림 8.10. “구성된 메시지 프로세서 패턴” 에 표시된 대로 구성된 메시지 프로세서 패턴을 사용하면 이를 분할하고 하위 메시지를 적절한 대상으로 라우팅한 다음 응답을 단일 메시지로 다시 집계하여 복합 메시지를 처리할 수 있습니다.
그림 8.10. 구성된 메시지 프로세서 패턴
8.14.2. Java DSL 예
다음 예제에서는 주문의 각 부분을 다른 인벤토리에서 확인해야 하는 다중 파트 순서를 채울 수 있는지 확인합니다.
// split up the order so individual OrderItems can be validated by the appropriate bean from("direct:start") .split().body() .choice() .when().method("orderItemHelper", "isWidget") .to("bean:widgetInventory") .otherwise() .to("bean:gadgetInventory") .end() .to("seda:aggregate"); // collect and re-assemble the validated OrderItems into an order again from("seda:aggregate") .aggregate(new MyOrderAggregationStrategy()) .header("orderId") .completionTimeout(1000L) .to("mock:result");
8.14.3. XML DSL 예
이전 경로는 다음과 같이 XML DSL로 작성할 수도 있습니다.
<route> <from uri="direct:start"/> <split> <simple>body</simple> <choice> <when> <method bean="orderItemHelper" method="isWidget"/> <to uri="bean:widgetInventory"/> </when> <otherwise> <to uri="bean:gadgetInventory"/> </otherwise> </choice> <to uri="seda:aggregate"/> </split> </route> <route> <from uri="seda:aggregate"/> <aggregate strategyRef="myOrderAggregatorStrategy" completionTimeout="1000"> <correlationExpression> <simple>header.orderId</simple> </correlationExpression> <to uri="mock:result"/> </aggregate> </route>
8.14.4. 처리 단계
처리는 8.4절. “Splitter” 을 사용하여 순서를 분할하여 시작합니다. 그러면 8.4절. “Splitter” 에서 개별 OrderItems
를 항목 유형에 따라 메시지를 라우팅하는 8.1절. “콘텐츠 기반 라우터” 로 보냅니다. 위젯 항목은 위젯
인벤토리 빈에서 확인할 수 있도록 전송되며 가젯 항목은 가젯
인벤토리 빈으로 전송됩니다. 이러한 OrderItems
의 유효성을 검사한 후 적절한 8080에서 8.5절. “수집기” 로 전송되어 검증된 OrderItems
를 다시 주문으로 수집하고 재조정합니다.
각 수신된 순서에는 주문 ID 가 포함된 헤더가 있습니다. 집계 단계에서 주문 ID를 사용합니다. aggregate()
DSL 명령에 .header("orderId")
한정자를 사용하여 키, orderId
와 함께 헤더를 사용하도록 지시합니다.
자세한 내용은 camel-core/src/test/java/org/apache/camel/processor 에서 ComposedMessageProcessorTest.java
예제 소스를 확인하십시오.