318.2. 添加 Camel 架构


对于 Camel 1.x,您需要使用以下命名空间:

http://activemq.apache.org/camel/schema/spring

使用以下模式位置:

http://activemq.apache.org/camel/schema/spring/camel-spring.xsd

您需要将 Camel 添加到 schemaLocation 声明中

http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd

因此 XML 文件类似如下:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

318.2.1. 使用 camel: namespace

或者您可以在 XML 声明中引用 camel XSD :

xmlns:camel="http://camel.apache.org/schema/spring"
  1. 因此,声明是:
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
  1. 然后,使用 camel: namespace 前缀,您可以省略内联命名空间声明:
<camel:camelContext id="camel5">
  <camel:package>org.apache.camel.spring.example</camel:package>
</camel:camelContext>

318.2.2. 使用 Spring 进行高级配置

请参阅 使用 Spring 的 CamelContext 高级配置中更多详情

$# using Java Code

您可以使用 Java Code 定义 RouteBuilder 实现。它们可以在 spring 中定义 Bean,然后在您的 camel 上下文中引用,例如:

318.2.3. 使用 <package>

Camel 还提供了强大的功能,允许在给定软件包中自动发现和初始化路由。这通过将标签添加到 spring 上下文定义中的 camel 上下文,指定要递归搜索 RouteBuilder 实施的软件包。要在 1.X 中使用此功能,需要一个 <package></package> 标签,指定应搜索的以逗号分隔的软件包列表,例如:

  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <package>org.apache.camel.spring.config.scan.route</package>
  </camelContext>

WARNING: 在将软件包名称指定为 org.apache.camel 或其子软件包时要小心。这会导致 Camel 在自己的软件包中搜索可能会导致问题的路由。

INFO:* will ignore already instantiated classes*.<package> 和 <packageScan> 将跳过由 Spring 等创建的任何类。因此,如果您将路由构建器定义为 spring bean 标签,则会跳过该类。您可以使用 < routeBuilder ref="theBeanId"/> 或 < contextScan> 功能包含这些 Bean。

318.2.4. 使用 <packageScan>

在 Camel 2.0 中,这已扩展为允许使用 Ant (如路径匹配)选择和排除发现的路由类。在 spring 中,这通过添加 <packageScan/> 标签来指定。该标签必须包含一个或多个 'package' 元素(类似于 1.x),可选一个或多个 'includes' 或 'excludes' 元素指定要应用到发现类的完全限定域名的模式。

  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <packageScan>
      <package>org.example.routes</package>
      <excludes>**.*Excluded*</excludes>
      <includes>**.*</includes>
    </packageScan>
  </camelContext>

在 include 模式之前应用排除模式。如果没有定义 include 或 exclude 模式,则返回软件包中发现的所有 Route 类。

在上例中,camel 将扫描所有 'org.example.routes' 软件包以及 RouteBuilder 类的任何子软件包。表明扫描找到两个 RouteBuilders,一个用于 org.example.routes 中,一个名为 'MyRoute",另一个名为 'MyExcludedRoute'(子软件包 'excluded')。每个类的完全限定名称都会被提取(org.example.routes.MyRoute, org.example.routes.excluded.MyExcluded.MyExcludedRoute),并应用 include 和 exclude 模式。

排除模式是,为为 fqcn 'org.example.routes.excluded.MyExcludedRoute' 和 veto camel 匹配,from 初始化它。

在覆盖范围内,这使用 Spring 的 AntPatternMatcher 实现,它匹配,如下所示

? matches one character
* matches zero or more characters
** matches zero or more segments of a fully qualified name

例如:

* unsetexcluded 将与 org.simple.Excluded, org.apache.camel.SomeExcludedRoute 或 org.example.RouteWhichIsExcluded 匹配

dc?cluded 将与 org.simple.IncludedRoute 匹配 org.simple.IncludedRoute,但不匹配 org.simple.PrecludedRoute

318.2.5. 使用 contextScan

从 Camel 2.4 开始提供

您可以允许 Camel 扫描容器上下文,例如,用于路由构建器实例的 Spring ApplicationContext。这可让您使用 Spring < component-scan&gt; 功能,并让 Camel 选择其扫描过程中由 Spring 创建的任何 RouteBuilder 实例。

这可让您使用 Spring @Component 注解路由,并包含这些路由。

@Component
public class MyRoute extends SpringRouteBuilder {

    @Override
    public void configure() throws Exception {
        from("direct:start").to("mock:result");
    }
}

您还可以使用 ANT 风格来包含和排除,如 < packageScan&gt; 文档中所述。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.