25. 快速Starter

您可以按照以下三步指南在不到 5 分钟的时间内尝试使用 Spring Cloud Stream,甚至无需跳入任何细节。

我们向您展示了如何创建一个 Spring Cloud Stream 应用程序,该应用程序接收来自您选择的消息传递中间件的消息(稍后会详细介绍),并将接收到的消息记录到控制台。我们称其为LoggingConsumer。尽管不是很实用,但是它很好地介绍了一些主要概念和抽象,使您更容易理解本用户指南的其余部分。

三个步骤如下:

25.1 使用 Spring Initializr 创建示例应用程序

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

  • 在“依赖项”部分中,开始 Importingstream。当出现“云流”选项时,选择它。

  • 开始 Importing“ kafka”或“ rabbit”。

  • 选择“ Kafka”或“ RabbitMQ”。

基本上,您选择应用程序绑定到的消息传递中间件。我们建议您使用已经安装的一种,或者对安装和运行感到更自在。另外,从“初始化程序”屏幕中可以看到,还有一些其他选项可以选择。例如,您可以选择 Gradle 作为构建工具,而不是 Maven(默认设置)。

  • 在“工件”字段中,Importing“ logging-consumer”。

“工件”字段的值成为应用程序名称。如果您选择 RabbitMQ 作为中间件,那么 Spring Initializr 现在应该如下所示:

stream initializr

  • 单击“生成项目”按钮。

这样做会将生成的项目的压缩版本下载到硬盘上。

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

Tip

我们鼓励您探索 Spring Initializr 中可用的许多可能性。它使您可以创建许多不同种类的 Spring 应用程序。

25.2 将项目导入 IDE

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

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

从技术上讲,此时,您可以运行应用程序的主类。它已经是一个有效的 Spring Boot 应用程序。但是,它没有任何作用,因此我们想添加一些代码。

25.3 添加消息处理程序,构建并运行

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

@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绑定(Importing 无输出)。这样做会向框架发出 signal,以启动对消息传递中间件的绑定,在该消息传递中间件中,它会自动创建绑定到Sink.INPUT通道的目的地(即队列,主题和其他对象)。

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

现在,您有了一个功能齐全的 Spring Cloud Stream 应用程序,该应用程序确实侦听消息。为了简单起见,我们从此处假设您在step one中选择 RabbitMQ。假设已安装并运行 RabbitMQ,则可以通过在 IDE 中运行其main方法来启动应用程序。

您应该看到以下输出:

--- [ 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)

转到 RabbitMQManagement 控制台或任何其他 RabbitMQClient 端,然后向input.anonymous.CbMIwdkJSBO1ZoPDOtHtCg发送消息。 anonymous.CbMIwdkJSBO1ZoPDOtHtCg部分代表组名并生成,因此在您的环境中它一定是不同的。对于更可预测的内容,可以通过设置spring.cloud.stream.bindings.input.group=hello(或您喜欢的任何名称)来使用显式组名。

消息的内容应为Person类的 JSON 表示形式,如下所示:

{"name":"Sam Spade"}

然后,在控制台中,您应该看到:

Received: Sam Spade

您还可以将应用程序构建并打包到引导 jar 中(使用./mvnw clean install),并使用java -jar命令运行构建的 JAR。

现在,您有了一个正在运行的(尽管非常基础)Spring Cloud Stream 应用程序。