请用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项目”并点击“下一步”。

image.png

不做特别更改,继续点击”下一步”。

image.png

选择「maven-archetype-quickstart」,然后点击「下一步」。

image.png

输入项目信息,点击“完成”。

image.png

这样一来,项目的创建就完成了。

修改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”,然后执行该操作。

image.png

执行成功后,将输出如下日志。

[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サンプル
广告
将在 10 秒后关闭
bannerAds