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 进行消息的发送和消费时涉及下面 4 个概念。
消息发送通道接口 Source
消息发送通道接口用于 Spring Cloud Stream 与外界通道的绑定,我们可以在该接口中通过注解的方式定义消息通道的名称。当使用该通道接口发送一个消息时,Spring Cloud Stream 会将所要发送的消息进行序列化,然后通过该接口所提供的 MessageChannel 将所要发送的消息发送到相应的消息中间件中。
消息通道 Channel
消息通道是对消息队列的一种抽象,用来存放消息发布者发布的消息或者消费者所要消费的消息。在向消息中间件发送消息时,需要指定所要发送的消息队列或主题的名称,而在这里 Spring Cloud Stream 进行了抽象,开发者只需要定义好消息通道,消息通道具体发送到哪个消息队列则在项目配置文件中进行配置,这样一方面可以将具体的消息队列名称与业务代码进行解耦,另外一方面也可以让开发者方便地根据项目环境切换不同的消息队列。
消息绑定器 Binder
Spring Cloud Stream 通过定义绑定器作为中间层,实现了应用程序与具体消息中间件细节之间的隔离,向应用程序暴露统一的消息通道,使应用程序不需要考虑与各种不同的消息中间件的对接。当需要升级或者更改不同的消息中间件时,应用程序只需要更换对应的绑定器即可,而不需要修改任何应用逻辑。
Spring Cloud Stream 默认提供了对 RabbitMQ 和 Apache Kafka 的绑定器,在应用中开发者只需要引入相应的绑定器就可以实现与 RabbitMQ 或者 Kafka 的对接,从而进行消息的发送与监听。Spring Cloud Stream 会根据类路径自动侦测开发者使用何种绑定器,当然,开发者也可以在项目中同时使用不同的绑定器,只要把相关的依赖代码包含进来即可,甚至可以让项目在运行时动态地将不同的消息通道绑定到不同的绑定器上。
消息监听通道接口 Sink
与消息发送通道接口(Source)相似,消息监听通道接口则是 Spring Cloud Stream 提供应用程序监听通道消息的抽象处理接口。当从消息中间件中接收到一个待处理消息时,该接口将负责把消息数据反序列化为 Java 对象,然后交由业务所定义的具体业务处理方法进行处理。
Spring Cloud 推荐在搭建微服务时,如果微服务之间需要进行通信,应尽量采取发布-订阅模式,避免点对点的调用。这样一方面可以大大减少微服务之间的耦合,另一方面可以保持它们之间的独立性和自治能力。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/44f4bbaef19fa99e4b79133b0】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论