8.7. 路由片段


概述

图 8.8 “路由聚合模式” 中显示的 路由 slip 模式允许您通过一系列处理步骤连续路由消息,其中设计时不已知的步骤序列,并可能因每个消息而异。消息要传递的端点列表存储在标头字段中( slip),Apache Camel 在运行时读取以即时构建管道。

图 8.8. 路由聚合模式

路由 slip

slip 标头

路由 slip 会出现在用户定义的标头中,其中标头值是以逗号分隔的端点 URI 列表。例如,一个路由 slip,它指定了一个安全任务序列,它指定了一个安全任务序列,身份验证、身份验证和去除重复信息类似如下:

cxf:bean:decrypt,cxf:bean:authenticate,cxf:bean:dedup

当前端点属性

在 Camel 2.5 中,路由 Slip 将在交换上设置属性(Exchange.SLIP_ENDPOINT),该交换包含当前端点,如 slip 那样。这可让您了解交换通过 slip 进行的进展。

第 8.7 节 “路由片段”事先 计算 slip,这意味着 slip 仅计算一次。如果您需要计算 slip on-fly,则使用 第 8.18 节 “动态路由器” 模式。

Java DSL 示例

以下路由从 direct:a 端点获取消息,并从 aRoutingSlipHeader 标头读取路由 slip :

from("direct:b").routingSlip("aRoutingSlipHeader");

您可以将标头名称指定为字符串 literal 或 expression。

您还可以使用双参数格式 routingSlip () 自定义 URI 分隔符。以下示例定义了一个路由,它使用 aRoutingSlipHeader 标头键作为路由 slip,并使用 # 字符作为 URI 分隔符:

from("direct:c").routingSlip("aRoutingSlipHeader", "#");

XML 配置示例

以下示例演示了如何在 XML 中配置相同的路由:

<camelContext id="buildRoutingSlip" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="direct:c"/>
    <routingSlip uriDelimiter="#">
      <headerName>aRoutingSlipHeader</headerName>
    </routingSlip>
  </route>
</camelContext>

忽略无效的端点

第 8.7 节 “路由片段” 现在支持 ignoreInvalidEndpoints,它 第 8.3 节 “接收者列表” 模式也支持。您可以使用它来跳过无效的端点。例如:

    from("direct:a").routingSlip("myHeader").ignoreInvalidEndpoints();

在 Spring XML 中,通过在 < routingSlip> 标签上设置 ignoreInvalidEndpoints 属性来 启用这个功能:

   <route>
       <from uri="direct:a"/>
       <routingSlip ignoreInvalidEndpoints="true">
         <headerName>myHeader</headerName>
       </routingSlip>
   </route>

例如,myHeader 包含两个端点 direct:foo,xxx:bar。第一个端点有效且正常工作。第二个无效,因此忽略。每当遇到无效的端点时,Apache Camel 会在 INFO 级别记录。

选项

routingSlip DSL 命令支持以下选项:

Name

默认值

描述

uriDelimiter

,

如果 Expression 返回多个端点,则使用分隔符。

ignoreInvalidEndpoints

false

如果无法解析端点 uri,则它应该被忽略。否则 Camel 将抛出一个例外,表示端点 uri 无效。

cacheSize

0

Camel 2.13.1/2.12.4 : 允许为 ProducerCache 配置缓存大小,该缓存生成者可在路由 slip 中重复使用。默认情况下,将使用默认缓存大小为 0。将值设为 -1 允许将缓存全部关闭。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.