Apache Camel - 项目

我们将使用 Maven 构建 Camel 项目。 不过,我们更喜欢使用 IntelliJ IDE 进行开发。 您可以为此项目使用您选择的任何 IDE。

创建新项目

创建一个新的 Maven 项目并指定以下内容 −

GroupId: Basket
ArtifactId: Basket

选择项目的默认位置,或者如果您愿意指定您选择的目录。

添加依赖项

您需要添加一些依赖项才能使用 Camel。 依赖项添加到 pom.xml 中。 所以打开pom.xml并添加以下两个依赖项 −

<dependencies>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
      <version>2.20.0</version>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-stream</artifactId>
      <version>2.20.0</version>
   </dependency>
</dependencies>

注意 − 我们的应用程序需要最少的依赖关系。 当您使用其库中的更多 Camel 组件时,您将需要在此 pom.xml 文件中添加相应的依赖项。

创建 Java DSL

接下来,您将在 Java DSL 中编写过滤和路由代码。 创建一个名为 DistributeOrderDSL 的新 Java 类。 将以下代码添加到其中 −

public class DistributeOrderDSL {
   public static void main(String[] args) throws Exception {
      CamelContext context = new DefaultCamelContext();
      try {
         context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
               from("direct:DistributeOrderDSL")
                  .split(xpath("//order[@product='soaps']/items")).to("stream:out");
               
               // .to("file:src/main/resources/order/");
            }
         });
         context.start();
         ProducerTemplate orderProducerTemplate = context.createProducerTemplate();
         InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
            .getResource("order.xml").getFile());
         orderProducerTemplate.sendBody("direct:DistributeOrderDSL", orderInputStream);
      } finally {
         context.stop();
      }
   }
}

main方法中,首先我们通过实例化DefaultCamelContext类中提供的默认实现来创建CamelContext

CamelContext context = new DefaultCamelContext();

接下来,我们通过创建匿名 RouteBuilder 实例来添加路由 −

context.addRoutes(new RouteBuilder() {

我们重写 configure 方法,以添加从直接 URI DistributeOrderDSL 到系统控制台的路由。 我们通过使用 xpath 查询提供一些过滤。

public void configure() throws Exception {
   from("direct:DistributeOrderDSL")
      .split(xpath("//order[@product = 'soaps']/items")).to("stream:out");
   // .to("file:src/main/resources/order/");
}

添加路由后,我们启动上下文 −

context.start();

接下来,我们添加用于创建直接 URI - DistributeOrderDSL 的代码。

ProducerTemplate orderProducerTemplate = context.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
   .getResource("order.xml").getFile());

最后我们开始处理 −

orderProducerTemplate.sendBody("direct:DistributeOrderDSL", orderInputStream);

现在,当您的 Java DSL 代码完成后,测试应用程序之前剩下的唯一事情就是将 order.xml 文件添加到您的项目中。 为此,您可以使用简介一章中显示的示例 XML。

测试结果

当您运行该应用程序时,您将看到以下输出 −

<items>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Original</Type>
      <Quantity>4</Quantity>
      <Price>25</Price>
   </item>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Lime</Type>
      <Quantity>6</Quantity>
      <Price>30</Price>
   </item>
</items>

请注意,此处仅列出肥皂的订单。 如果您希望将其存储到本地文件,只需注释 stream.out 行并取消注释 configure 方法中的以下行 −

// .to("file:src/main/resources/order/");

在接下来的部分中,我们将学习如何将 Camel 与 Spring 结合使用。