23. 快速入门

您可以在不到 5 分钟内尝试 Spring Cloud Stream,甚至在您按照此 three-step 指南跳转到任何细节之前。

我们将向您展示如何创建一个 Spring Cloud Stream application,它接收来自您选择的消息传递中间件的消息(稍后会详细介绍),并将收到的消息记录到 console。我们称之为LoggingConsumer。虽然不太实用,但它提供了一些主要概念和抽象的良好介绍,使得更容易消化本用户指南的 rest。

这三个步骤如下:

23.1 使用 Spring Initializr 创建 Sample Application

要开始使用,请访问Spring Initializr。从那里,您可以生成我们的LoggingConsumer application。为此:

  • 依赖项部分中,启动 typing stream。当出现“Cloud Stream”选项时,选择它。

  • 开始 typing'kafka'或'rabbit'。

  • 选择“Kafka”或“RabbitMQ”。

基本上,您选择 application 绑定的消息传递中间件。我们建议您使用已安装的或安装和运行时感觉更舒适。此外,您可以从 Initilaizer 屏幕中看到,您可以选择其他一些选项。例如,您可以选择 Gradle 作为 build 工具而不是 Maven(默认值)。

  • Artifact字段中,输入'logging-consumer'。

Artifact字段的 value 变为 application name。如果你选择 RabbitMQ 作为中间件,你的 Spring Initializr 现在应该如下:

stream initializr

  • 单击生成项目按钮。

这样做会将生成的项目的压缩 version 下载到硬盘驱动器中。

  • 将文件解压缩到要用作项目目录的文件夹中。

我们鼓励您探索 Spring Initializr 中的许多可能性。它允许您创建许多不同类型的 Spring applications。

23.2 将项目导入 IDE

现在您可以 import 项目到您的 IDE。请记住,根据 IDE,您可能需要遵循特定的 import 过程。例如,根据项目的生成方式(Maven 或 Gradle),您可能需要遵循特定的 import 过程(对于 example,在 Eclipse 或 STS 中,您需要使用 File→Import→Maven→Existing Maven Project)。

导入后,项目必须没有任何错误。此外,src/main/java应包含com.example.loggingconsumer.LoggingConsumerApplication

从技术上讲,此时,您可以运行 application 的主 class。它已经是一个有效的 Spring Boot application。但是,它没有做任何事情,所以我们想添加一些 code。

23.3 添加消息处理程序,Building 和 Running

修改com.example.loggingconsumer.LoggingConsumerApplication class 如下所示:

@SpringBootApplication
@EnableBinding(Sink.class)
public class LoggingConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(LoggingConsumerApplication.class, args);
	}

	@StreamListener(Sink.INPUT)
	public void handle(Person person) {
		System.out.println("Received: " + person);
	}

	public static class Person {
		private String name;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String toString() {
			return this.name;
		}
	}
}

从前面的清单中可以看出:

  • 我们使用@EnableBinding(Sink.class)启用了Sink binding(input-no-output)。这样做会向 framework 发出信号以启动 binding 到消息传递中间件,在那里它会自动创建绑定到Sink.INPUT channel 的目标(即 queue,topic 和其他)。

  • 我们添加了一个handler方法来接收Person类型的传入消息。这样做可以让您看到 framework 的核心 features 之一:它尝试自动将传入的消息有效负载转换为类型Person

您现在拥有一个功能齐全的 Spring Cloud Stream application,可以侦听消息。从这里开始,为简单起见,我们假设您在第一步中选择了 RabbitMQ。假设您已安装 RabbitMQ 并运行 running,则可以通过在 IDE 中运行main方法来启动 application。

您应该看到以下输出:

--- [ main] c.s.b.r.p.RabbitExchangeQueueProvisioner : declaring queue for inbound: input.anonymous.CbMIwdkJSBO1ZoPDOtHtCg, bound to: input
	--- [ main] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [localhost:5672]
	--- [ main] o.s.a.r.c.CachingConnectionFactory       : Created new connection: rabbitConnectionFactory#2a3a299:0/[emailprotected] . .
	. . .
	--- [ main] o.s.i.a.i.AmqpInboundChannelAdapter      : started inbound.input.anonymous.CbMIwdkJSBO1ZoPDOtHtCg
	. . .
	--- [ main] c.e.l.LoggingConsumerApplication         : Started LoggingConsumerApplication in 2.531 seconds (JVM running for 2.897)

转到 RabbitMQ management console 或任何其他 RabbitMQ client 并向input.anonymous.CbMIwdkJSBO1ZoPDOtHtCg发送消息。 anonymous.CbMIwdkJSBO1ZoPDOtHtCg部分代表 group name 并且已生成,因此它在您的环境中必然会有所不同。对于更可预测的内容,您可以通过设置spring.cloud.stream.bindings.input.group=hello(或您喜欢的任何 name)来使用显式 group name。

消息的内容应该是Person class 的 JSON 表示,如下所示:

{"name":"Sam Spade"}

然后,在您的 console 中,您应该看到:

Received: Sam Spade

您还可以使用java -jar命令 build 并将 application 打包到 boot jar(使用./mvnw clean install)和 run 构建的 JAR。

现在你有一个工作(虽然非常基本)Spring Cloud Stream application。