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

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/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”,然后执行它。

image.png

执行成功后,将输出以下日志信息。

[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サンプル

广告
将在 10 秒后关闭
bannerAds