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 前缀,您可以省略 inline 命名空间声明:
<camel:camelContext id="camel5">
  <camel:package>org.apache.camel.spring.example</camel:package>
</camel:camelContext>

318.2.2. 使用 Spring 的高级配置

有关使用 Spring 的 CamelContext 高级配置的更多详细信息

$$ $ 使用 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>

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

INFO:* 将忽略已实例化的类*。<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>

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

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

排除模式 * RoleExcluded 将与 fqcn 'org.example.routes.excluded.MyExcludedRoute' 和 veto camel 在初始化时匹配。

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

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

例如:

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

If??cluded 将匹配 org.simple.IncludedRoute, org.simple.Excluded 而不是与 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.