Spring Cloud Stream简述

Spring Cloud Stream是创建消息驱动微服务应用的框架,其基于Spring Boot,可以用来构建单独的或者工业级Spring应用。Spring Cloud Stream继承了Spring应用框架的理念,实现了一个基于注解驱动的框架,可以让开发者通过注解的方式,很容易地在应用中实现消息的发布和订阅处理。

Spring Cloud Stream支持与多种消息中间件整合,如Kafka、RabbitMQ等,使用Spring Integration提供与消息代理之间的连接,为应用程序的消息发布和消费提供了一个平台中立的接口,将实现的细节独立于应用代码之外,从而有效简化了上层研发人员对各消息中间件使用上的复杂度,让开发者更加专注于核心业务的处理。

通过Spring Cloud Stream的应用模型框架图来了解一下涉及的几个概念。如下图中所示,在该图中有两个微服务A和B,微服务A会通过Spring Cloud Stream发布消息,而微服务B则是微服务A消息的消费者。

Spring Cloud Stream简述

在模型框架图中可以看到,使用Spring Cloud Stream进行消息的发送和消费时涉及下面4个概念。

  1. 消息发送通道接口Source

消息发送通道接口用于Spring Cloud Stream与外界通道的绑定,我们可以在该接口中通过注解的方式定义消息通道的名称。当使用该通道接口发送一个消息时,Spring Cloud Stream会将所要发送的消息进行序列化,然后通过该接口所提供的MessageChannel将所要发送的消息发送到相应的消息中间件中。

  1. 消息通道Channel

消息通道是对消息队列的一种抽象,用来存放消息发布者发布的消息或者消费者所要消费的消息。在向消息中间件发送消息时,需要指定所要发送的消息队列或主题的名称,而在这里Spring Cloud Stream进行了抽象,开发者只需要定义好消息通道,消息通道具体发送到哪个消息队列则在项目配置文件中进行配置,这样一方面可以将具体的消息队列名称与业务代码进行解耦,另外一方面也可以让开发者方便地根据项目环境切换不同的消息队列。

  1. 消息绑定器Binder

Spring Cloud Stream通过定义绑定器作为中间层,实现了应用程序与具体消息中间件细节之间的隔离,向应用程序暴露统一的消息通道,使应用程序不需要考虑与各种不同的消息中间件的对接。当需要升级或者更改不同的消息中间件时,应用程序只需要更换对应的绑定器即可,而不需要修改任何应用逻辑。

Spring Cloud Stream默认提供了对RabbitMQ和Apache Kafka的绑定器,在应用中开发者只需要引入相应的绑定器就可以实现与RabbitMQ或者Kafka的对接,从而进行消息的发送与监听。Spring Cloud Stream会根据类路径自动侦测开发者使用何种绑定器,当然,开发者也可以在项目中同时使用不同的绑定器,只要把相关的依赖代码包含进来即可,甚至可以让项目在运行时动态地将不同的消息通道绑定到不同的绑定器上。

  1. 消息监听通道接口Sink

与消息发送通道接口(Source)相似,消息监听通道接口则是Spring Cloud Stream提供应用程序监听通道消息的抽象处理接口。当从消息中间件中接收到一个待处理消息时,该接口将负责把消息数据反序列化为Java对象,然后交由业务所定义的具体业务处理方法进行处理。

发表评论

相关文章