在使用Apache Camel+Spring Boot 2时,实现一个Hello World的REST API编程
首先
这是使用Apache Camel+Spring Boot 2创建的Hello World的”REST API部分”。控制台应用程序部分请参考以下帖子。
使用Apache Camel和Spring Boot 2编写Hello World(控制台应用程序)
创建一个REST API,当访问”/spring/hello”时,返回”Hello World”的响应。同时,异步地在服务器端的标准输出中显示请求的内容。
请注意,这个示例并没有展示出Apache Camel的优点。
我们使用了以下框架和组合来创建。
-
- Apache Camel 2.3.0
-
- Spring Boot 2.1.1
-
- JDK8
-
- Eclipse Photon(4.8.0)
- Maven
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mkyz08.sample</groupId>
<artifactId>camel-springboot-rest-test</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>camel-springboot-rest-test Maven Webapp</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.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是一个普通的Spring Boot应用程序的启动。
SpringApplication.run(Application.class, args);
无需创建设置文件,因为只有应用程序名称。
camel.springboot.name = MyCamelRestApp
下一步是创建控制器类(HelloRestController)。
在控制器类(HelloRestController)上添加@RestController注解。
@RestController
@RequestMapping("/spring")
public class HelloRestController {
使用RequestMapping注解将客户端的请求映射为GET方法。
@RequestMapping(method = RequestMethod.GET, value = "/hello",
produces = "text/plain")
在hello方法中,将接收到的msg参数的值存储到“seda:hello_world”的异步队列中。如果要同步执行,则可以将其更改为“direct:hello_world”。
然后,将字符串”Hello World”作为响应返回。
public String hello(String msg) {
Endpoint end = context.getEndpoint("seda:hello_world");
producer.sendBody(end, msg);
return "Hello World";
HelloRestController类的整体源代码如下。
package mkyz08.example;
import javax.annotation.Resource;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.ProducerTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/spring")
public class HelloRestController {
@Resource
private ProducerTemplate producer = null;
@Resource
private CamelContext context;
@RequestMapping(method = RequestMethod.GET, value = "/hello",
produces = "text/plain")
public String hello(String msg) {
Endpoint end = context.getEndpoint("seda:hello_world");
producer.sendBody(end, msg);
return "Hello World";
}
}
我会创建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("seda:hello_world")
.routeId("hello world route")
.setBody(simple("Hello World : ${body}"))
.to("stream:out");
}
}
以下是路线的内容:
-
- 「from(“seda:hello_world”)」で、受信したリクエストを非同期で処理を開始
-
- 「.routeId(“hello world route”)」、これはルートIDを指定しているだけ
-
- 「.setBody(simple(“Hello World : ${body}”))」、ExchangeのBODYに受信したパラメータ(msg)の値を設定
- 「.to(“stream:out”)」でExchangeのBODYに入っている、パラメータ(msg)の値をコンソールに出力しています。
from("seda:hello_world")
.routeId("hello world route")
.setBody(simple("Hello World : ${body}"))
.to("stream:out");
运行Hello World的Web应用程序。
运行所创建的程序,并访问以下网址:
当收到「Hello World」时,它也会显示在服务器端的标准输出中,如下所示。
Hello World : hoge
创建可执行的jar文件
为了创建一个可执行的jar文件,你需要在”执行配置”中输入以下内容来实现目标”clean install spring-boot:repackage”,然后执行它。
执行成功后,将输出以下日志信息。
[INFO] --- spring-boot-maven-plugin:2.1.0.RELEASE:repackage (default-cli) @ camel-springboot-rest-test ---
[INFO] Replacing main artifact C:\pleiades\workspace\camel-springboot-rest-test\target\camel-springboot-rest-test-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.017 s
[INFO] Finished at: 2018-12-06T18:39:38+09:00
[INFO] ------------------------------------------------------------------------```
可以在项目的”target”目录下找到可执行的jar文件,并使用以下命令运行它。
java -jar camel-springboot-rest-test-0.0.1-SNAPSHOT.jar
请提供要转述的具体内容。
Apache Camel公式サイト Spring Boot
Apache Camel with Spring Boot
Apache Camel公式サイト Spring Bootサンプル