使用Apache Camel Spring Boot starters创建简单的camel应用程序的步骤

为了验证Apache Camel创建的应用程序的操作,我想创建一个简单的应用程序,但是我几乎没有从头开始创建Java系应用程序的经验,对其不熟悉。

首先,按照官方网页的说明,尝试创建一个每秒记录一次日志的camel应用程序。为了简便起见,使用了Camel Spring Boot starters,并不验证camel的启动等相关事宜。

环境

    • Java: 1.8.0_191

 

    • Maven: 3.6.3

 

    • Camel: 3.2.0

Spring: 5.2.5.RELEASE
Spring Boot: 2.2.6.RELEASE


    • OS: Ubuntu 18.04

 

    IDE: IntelliJ IDEA

项目准备。

虽然对于Maven来说,大概知道需要一个pom.xml文件,但是目前还不知道如何编写。因为camel的页面只列出了依赖关系的编写方式,所以还需要准备一个外部模板。

由于没有办法,我选择通过IDE(IntelliJ IDEA)建立一个新项目来进行处理。

    1. 文件 → 新建 → 项目…

 

    1. 初始画面

从左侧列表中选择Maven
项目SDK 暂时保持为1.8
保持不勾选”从原型创建”
点击”下一步”

接下来的画面

名称: mycamelapp

位置: 选择一个合适的新目录
保持构件坐标不变
点击”完成”


出于预防起见,我们设置了Git并保存了工作。由于GitHub上有模板集,我们决定使用.gitignore。

cd path/to/app

git init

for kind in Java Maven Global/JetBrains; do
  echo "###--- github/gitignore : ${kind}.gitignore ---###"
  curl https://raw.githubusercontent.com/github/gitignore/master/${kind}.gitignore
  echo
done >> .gitignore

git add .
git commit -m 'Create a Maven project'

pom.xml -> pom.xml

根据 https://camel.apache.org/camel-spring-boot/latest/index.html 的指示添加依赖关系。我没有意识到依赖关系需要在 dependencyManagement 的内部和外部分别编写,这导致花费了一些时间。

整个集体情况如下。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mycamelapp</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- https://camel.apache.org/camel-spring-boot/latest/index.html -->
    <dependencyManagement>
        <dependencies>
            <!-- Camel BOM -->
            <dependency>
                <groupId>org.apache.camel.springboot</groupId>
                <artifactId>camel-spring-boot-dependencies</artifactId>
                <version>3.2.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- ... other BOMs or dependencies ... -->
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- Camel Starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
        </dependency>
        <!-- ... other dependencies ... -->
    </dependencies>
</project>

其他依赖项中提到了一个示例组件ActiveMQ,但由于我们不打算使用它,所以跳过。

路线定义

我在这个保守的应用程序中已经看过很多例子,所以个人没有任何疑问。在https://camel.apache.org/camel-spring-boot/latest/spring-boot.html#SpringBoot-CamelSpringBootStarter中定义一个简短的路由。

cd path/to/app

mkdir -p src/main/java/org/example/mycamelapp/routes
touch    src/main/java/org/example/mycamelapp/routes/SampleTimerRoute.java
package org.example.mycamelapp.routes;

import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class SampleTimerRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("timer:foo").to("log:bar");
    }
}

路线是什么?

简单来说,这是一个管道。可以想象一下Java8中的Stream API,不断流过的数据如何在DSL中进行处理。

from(uri) はデータの入口。

データは「exchange」と呼ばれる入れ物に入っている。
URIの形で様々なコンポーネント(数百種類)とその詳細設定を指定できる。 timer で逐次生成したり file でファイルをポーリングしたり。

to(uri) はデータの渡し先。

終端というわけではなく、1回である必要も無い。
こちらもURIで色々できる。 sql でDBにクエリを投げたり http でHTTPリクエストを投げたり。

データの処理方法も色々。

条件分岐・ループ・例外処理などもDSLで構築できる。
単純なexchange操作は方法が用意されているし、もっと複雑な処理なら「processor」を定義すればいい。

SpringBoot的配置

从 camel 的文档中找不到,但是似乎应该写下应用程序的起始点。一旦写下,IDE 将在相应行上显示“运行”标记。

package org.example.mycamelapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyCamelApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyCamelApplication.class, args);
    }
}

为了确保应用程序在启动后不会立即关闭,可以将参数写入yaml(或properties)文件中,这样就可以完成。

# to keep the JVM running
camel:
  springboot:
    main-run-controller: true

启动

如果在IDE上,只需点击前面提到的”运行”按钮就可以立即启动。


如果要使用Maven命令启动,需要在pom.xml文件中进行配置。

...
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.6.RELEASE</version>
            </plugin>
        </plugins>
    </build>
...
cd path/to/app

mvn spring-boot:run

参考:

    • Apache Camel 公式ドキュメント

Spring Boot starters

Spring Boot # Camel Spring Boot Starter

Apache Camel サンプル

Apache Camel examples
Camel Example Spring Boot

その他

Getting Started | Building an Application with Spring Boot
Spring Boot Maven Plugin – Usage
github/gitignore: A collection of useful .gitignore templates

广告
将在 10 秒后关闭
bannerAds