使用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)建立一个新项目来进行处理。
-
- 文件 → 新建 → 项目…
-
- 初始画面
从左侧列表中选择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