5.5. 消息路由器


概述

图 5.7 “消息路由器模式”显示的消息路由器 是一个过滤器,它消耗来自单个消费者端点的消息,并根据具体决策条件将它们重定向到适当的目标端点。消息路由器仅关注重定向消息;它不会修改消息内容。

但是,默认情况下,每当 Camel 将消息交换路由到接收者端点时,它发送的是原始交换对象的 shouldow副本。在 shouldow 副本中,原始交换的元素(如消息正文、标头和附件)仅通过引用来复制。通过发送可重复利用资源的复制,Camel 会优化性能。但是,因为这些应该式副本都是链接的,因此在 Camel 将消息路由到多个端点时,代价是您丢失了将自定义逻辑应用到路由到不同收件人的副本的能力。有关如何启用 Camel 将消息的唯一版本路由到不同的端点的详情,请参考 "应用自定义处理到传出消息"。

图 5.7. 消息路由器模式

消息路由器模式

可以使用 choice () 处理器在 Apache Camel 中轻松实现消息路由器,其中每个替代目标端点都可以使用 when () 子使用(有关所选处理器的详情,请参阅 第 1.5 节 “Processors”)。

Java DSL 示例

以下 Java DSL 示例演示了如何根据 foo 标头的内容将消息路由到三个替代目的地( seda:aseda:bseda:c):

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 (),则默认丢弃任何不匹配的交换。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.