8.2 Spring Cloud Stream简介
Spring Cloud可以轻松地将消息传递集成到基于Spring的微服务中,它是通过Spring Cloud Stream项目来实现这一点的。Spring Cloud Stream是一个由注解驱动的框架,它允许开发人员在Spring应用程序中轻松地构建消息发布者和消费者。
Spring Cloud Stream还允许开发人员抽象出正在使用的消息传递平台的实现细节。Spring Cloud Stream可以使用多个消息平台(包括Apache Kafka项目和RabbitMQ),而平台的具体实现细节则被排除在应用程序代码之外。在应用程序中实现消息发布和消费是通过平台无关的Spring接口实现的。
注意
在本章中,读者将使用名为Kafka的轻量级消息总线。Kafka是一种轻量级、高性能的消息总线,允许开发人员异步地将消息从一个应用程序发送到一个或多个其他应用程序。
Kafka是用Java编写的,由于Kafka具有高可靠性和可伸缩性,在许多基于云的应用程序中,它已经成为事实上的标准消息总线。此外,Spring Cloud Stream 还支持使用RabbitMQ作为消息总线。Kafka和RabbitMQ都是强大的消息平台,我在本书中选择了Kafka,因为它是我最熟悉的。
要了解Spring Cloud Stream,让我们从Spring Cloud Stream的架构开始讨论,并熟悉Spring Cloud Stream的术语。如果读者以前从未使用过基于消息传递的平台,那么接下来所涉及的新术语可能会有些令人难以理解。
Spring Cloud Stream架构
让我们以通过消息传递进行通信的两个服务的角度来查看Spring Cloud Stream的架构。在这两个服务中,一个是消息发布者,另一个是消息消费者。图8-3展示了如何使用Spring Cloud Stream来帮助消息传递。
图8-3 随着消息的发布和消费,它将流经一系列的Spring Cloud Stream组件,这些组件抽象出底层消息传递平台
随着Spring Cloud中消息的发布和消费,有4个组件涉及发布消息和消费消息,它们是:
发射器(source);
通道(channel);
绑定器(binder);
接收器(sink)。
1.发射器
当一个服务准备发布消息时,它将使用一个发射器发布消息。发射器是一个Spring注解接口,它接收一个普通Java对象(POJO),该对象代表要发布的消息。发射器接收消息,然后序列化它(默认的序列化是JSON)并将消息发布到通道。
2.通道
通道是对队列的一个抽象,它将在消息生产者发布消息或消息消费者消费消息后保留该消息。通道名称始终与目标队列名称相关联。然而,队列名称永远不会直接公开给代码,相反,通道名称会在代码中使用。这意味着开发人员可以通过更改应用程序的配置而不是应用程序的代码来切换通道读取或写入的队列。
3.绑定器
绑定器是Spring Cloud Stream框架的一部分,它是与特定消息平台对话的Spring代码。Spring Cloud Stream框架的绑定器部分允许开发人员处理消息,而不必依赖于特定于平台的库和API来发布和消费消息。
4.接收器
在Spring Cloud Stream中,服务通过一个接收器从队列中接收消息。接收器监听传入消息的通道,并将消息反序列化为POJO。从这里开始,消息就可以按照Spring服务的业务逻辑来进行处理。