8.14. 由消息处理器组成


由消息处理器组成

图 8.10 “由消息处理器模式组成” 所示,其包含 的消息处理器 模式允许您通过分割复合消息来处理复合消息,将子消息路由到适当的目的地,然后将响应重新置于单个消息中。

图 8.10. 由消息处理器模式组成

分发聚合

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

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.4 节 “Splitter” 分割顺序。第 8.4 节 “Splitter” 随后将单个 OrderItems 发送到 第 8.1 节 “基于内容的路由器”,它根据项目类型路由信息。小部件 项目会发送在 widgetInventory bean 和 gadget 项中的检查发送到 gadgetInventory bean。旦相应的 bean 验证了这些 OrderItems 后,这些 OrderItems 会被发送到 第 8.5 节 “聚合器”,它将被验证的 OrderItems 重新收集并重新集合到 中。

每个接收的顺序都有一个包含 顺序 ID 的标头。我们在聚合步骤中使用顺序 ID: aggregate () DSL 命令的 .header ("orderId") qualifier 指示聚合器使用带有键, orderId 的标头,作为 correlation 表达式。

如需详细信息,请检查 camel-core/src/test/java/org/apache/camel/processorComposedMessageProcessorTest.java 示例源。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.