请用Apache Camel+Spring Boot 2来创建一个Hello World示例(命令行应用程序)
首先
我們將使用以下組合來創建一個控制台應用程序,每隔1秒輸出一次「你好,世界」。
-
- Apache Camel 2.3.0
-
- Spring Boot 2.1.1
-
- JDK8
-
- Eclipse Photon(4.8.0)
- Maven
以下是REST API的编码。
使用Apache Camel和Spring Boot 2创建Hello World(REST API篇)。
Apache Camel 是一個開源的軟體整合框架。
我认为Spring Boot无需解释,所以我只会简单介绍Apache Camel。
Apache Camel被描述为中间件(框架),用于系统集成。系统集成遵循企业集成模式这一最佳实践,而Camel可以轻松实现这一目标。
如果写得像这样听起来很复杂,那可能因为设置了不必要的门槛。实际上,我们可以将其理解为一个能够轻松实现“从另一个系统接收请求、进行某些处理,然后将其发送或存储在某个地方(如数据库或队列)”的框架。
它可以与各种其他系统(如REST/SOAP、数据库(JDBC、MongoDB、DynamoDB等)、文件、消息队列(ActiveMQ、Kafka、RabbitMQ等)、电子邮件、MQTT等)进行集成,其中用于实现这一目标的部件被称为组件。
目前有接近200个组件可用,所以通常可以找到要连接的组件。
至于“进行某些处理”部分,该框架已经涵盖了数据转换、格式转换、路由、错误处理等功能,是适用于各种应用程序的框架。
使用Eclipse创建一个项目。
首先,创建一个新的Maven项目。
选择“Maven项目”并点击“下一步”。
不做特别更改,继续点击”下一步”。
选择「maven-archetype-quickstart」,然后点击「下一步」。
输入项目信息,点击“完成”。
这样一来,项目的创建就完成了。
修改pom.xml文件
修改pom.xml如下。
<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>mkyz08.sample</groupId>
<artifactId>camel-springboot-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>camel-springboot-test</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<camel-version>2.23.0</camel-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-parent</artifactId>
<version>${camel-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-stream</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
创建程序
创建主程序如下所示。
package mkyz08.example;
import org.apache.camel.spring.boot.CamelSpringBootApplicationController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = new SpringApplication(Application.class).run(args);
CamelSpringBootApplicationController applicationController =
applicationContext.getBean(CamelSpringBootApplicationController.class);
applicationController.run();
}
}
这是一个普通的Spring Boot应用程序的启动。
ApplicationContext applicationContext = new SpringApplication(Application.class).run(args);
以下是与普通的Spring Boot应用程序启动不同的地方。
通过运行CamelSpringBootApplicationController类中的run方法,可以将其作为守护线程继续执行。如果不这样做,控制台应用将启动后立即结束。
CamelSpringBootApplicationController applicationController =
applicationContext.getBean(CamelSpringBootApplicationController.class);
applicationController.run();
设定文件如下所示。
通过设置 “spring.main.web-application-type=none”,可以阻止 Tomcat 启动。
“timer.period” 是应用程序的设置,在每秒钟显示一次 Hello World 时使用的设置值。
camel.springboot.name = MyCamelApp
spring.main.web-application-type=none
timer.period = 1000
最終步骤是创建Camel的路由。
为了定义Camel的路由,我们在类上加上了Component注解,并继承了RouteBuilder类。
然后,我们重写了configure方法,来编写路由的内容。
package mkyz08.example;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
@Component
public class HelloWorldRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer://exampleTimer?period={{timer.period}}")
.routeId("hello world route")
.setBody(simple("Hello World at ${header.firedTime}"))
.to("stream:out");
}
}
以下是有关路线的内容。
-
- 「timer://exampleTimer?period={{timer.period}}」で、1秒おきに実行するタイマーを定義
-
- 「.routeId(“hello world route”)」、これはルートIDを指定しているだけ
-
- 「.setBody(simple(“Hello World at ${header.firedTime}”))」、ExchangeのBODYにHello Worldの文字列を設定
- 「.to(“stream:out”)」でExchangeのBODYに入っている、Hello Worldの文字列をコンソールに出力しています。
from("timer://exampleTimer?period={{timer.period}}")
.routeId("hello world route")
.setBody(simple("Hello World at ${header.firedTime}"))
.to("stream:out");
执行Hello World控制台应用程序
运行创建的程序,将会在控制台上输出以下内容。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
2018-12-06 14:59:46.472 INFO 17612 --- [ main] mkyz08.example.Application : Starting Application on mky-PC with PID 17612 (C:\pleiades\workspace\camel-springboot-test\target\classes started by mky in C:\pleiades\workspace\camel-springboot-test)
2018-12-06 14:59:46.474 INFO 17612 --- [ main] mkyz08.example.Application : No active profile set, falling back to default profiles: default
2018-12-06 14:59:47.516 INFO 17612 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.apache.camel.spring.boot.CamelAutoConfiguration' of type [org.apache.camel.spring.boot.CamelAutoConfiguration$$EnhancerBySpringCGLIB$$9ed7a086] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-12-06 14:59:47.731 INFO 17612 --- [ main] o.a.c.i.converter.DefaultTypeConverter : Type converters loaded (core: 195, classpath: 1)
2018-12-06 14:59:48.080 INFO 17612 --- [ main] o.a.camel.spring.boot.RoutesCollector : Loading additional Camel XML routes from: classpath:camel/*.xml
2018-12-06 14:59:48.080 INFO 17612 --- [ main] o.a.camel.spring.boot.RoutesCollector : Loading additional Camel XML rests from: classpath:camel-rest/*.xml
2018-12-06 14:59:48.086 INFO 17612 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.23.0 (CamelContext: MyCamelApp) is starting
2018-12-06 14:59:48.086 INFO 17612 --- [ main] o.a.c.m.ManagedManagementStrategy : JMX is enabled
2018-12-06 14:59:48.274 INFO 17612 --- [ main] o.a.camel.spring.SpringCamelContext : StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
2018-12-06 14:59:48.385 INFO 17612 --- [ main] o.a.camel.spring.SpringCamelContext : Route: hello world route started and consuming from: timer://exampleTimer?period=1000
2018-12-06 14:59:48.387 INFO 17612 --- [ main] o.a.camel.spring.SpringCamelContext : Total 1 routes, of which 1 are started
2018-12-06 14:59:48.390 INFO 17612 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.23.0 (CamelContext: MyCamelApp) started in 0.302 seconds
2018-12-06 14:59:48.394 INFO 17612 --- [ main] mkyz08.example.Application : Started Application in 2.316 seconds (JVM running for 2.825)
Hello World at Thu Dec 06 14:59:49 JST 2018
Hello World at Thu Dec 06 14:59:50 JST 2018
Hello World at Thu Dec 06 14:59:51 JST 2018
创建可以执行的JAR文件
为了创建可执行的jar文件,您可以在”运行配置”中输入目标为”clean install spring-boot:repackage”,然后执行该操作。
执行成功后,将输出如下日志。
[INFO] --- spring-boot-maven-plugin:2.1.1.RELEASE:repackage (default-cli) @ camel-springboot-test ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.930 s
[INFO] Finished at: 2018-12-06T13:03:00+09:00
[INFO] ------------------------------------------------------------------------
可以使用以下命令在项目的“target”目录中创建可执行的jar文件,并进行执行。
java -jar camel-springboot-test-0.0.1-SNAPSHOT.jar
请在以下参考案例中选择一个合适的中文释义。(仅需要一个选项)
-
- Apache Camel公式サイト Spring Boot
-
- Apache Camel with Spring Boot
- Apache Camel公式サイト Spring Bootサンプル