5.5. Message Router
概述
在 图 5.7 “Message Router Pattern” 中 显示的消息路由器 是消耗来自单一消费者端点的消息的过滤器,并根据特定的决策条件将它们重定向到适当的目标端点。消息路由器仅关注重定向消息;不会修改消息内容。
但是,默认情况下,每当 Camel 将消息交换路由到接收者端点时,它发送是原始交换对象的应急副本。在演练中,原始交换的元素(如消息正文、标头和附件)仅通过参考来复制。通过发送应复制重复使用资源,Camel 会优化性能。但是,因为这应该完全链接在一起,因此 Camel 将消息路由到多个端点,因此您失去应用自定义逻辑以将自定义逻辑复制到不同收件人的能力。有关如何启用 Camel 将消息的唯一版本路由到不同的端点的详情,请参考 "应用自定义处理到传出消息"。
图 5.7. Message Router Pattern
使用 select ()
处理器在 Apache Camel 中轻松实施消息路由器,其中每个备用目标端点都可使用 when ()
子使用(有关选择处理器的详细信息)选择。第 1.5 节 “处理器”
Java DSL 示例
以下 Java DSL 示例演示了如何将消息路由到三个替代目的地( seda:a
、seda:b
或 seda:c
),具体取决于 foo
标头的内容:
from("seda:a").choice() .when(header("foo").isEqualTo("bar")).to("seda:b") .when(header("foo").isEqualTo("cheese")).to("seda:c") .otherwise().to("seda:d");
XML 配置示例
以下示例演示了如何在 XML 中配置相同的路由:
<camelContext id="buildSimpleRouteWithChoice" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="seda:a"/> <choice> <when> <xpath>$foo = 'bar'</xpath> <to uri="seda:b"/> </when> <when> <xpath>$foo = 'cheese'</xpath> <to uri="seda:c"/> </when> <otherwise> <to uri="seda:d"/> </otherwise> </choice> </route> </camelContext>
没有其他选择
如果您在没有 otherwise ()
子句的情况下使用 choice ()
,则默认丢弃任何不匹配的交换。