Spring Cloud Stream介绍
Spring Cloud Stream是一个用于构建消息驱动的微服务应用程序的框架。Spring Cloud Stream以Spring Boot为基础,创建独立的生产级Spring应用程序,并使用Spring Integration提供与消息代理的连接。它提供了来自多个供应商的中间件的的配置,引入了发布-订阅语义、使用者组和分区的概念。
知识点
- Spring Messaging
- Spring Integration
- Spring Cloud Stream
基础内容
Spring Messaging
Spring Messaging 是 Spring Framework 中的一个模块,其作用就是统一消息的编程模型。
- Message,消息对象,包含Header和Payload;Payload可以是任意类型,Header定义了通用信息(例如:id、时间和返回地址等);
- Message Channel,Pipes and Filters模型中的Pipe;其中定义了用来发送消息到此Pipe的send方法;其根据MessageHandler中两种获取消息的方式定义了两个子接口:PollableChannel用来表示支持拉模型的通道,其中定义了receive方法用来支持MessageHandler主动拉取消息;SubscribableChannel用来表示支持推模型(发布/订阅模型)的通道,其中定义了subscribe和unsubscribe方法用来支持MessageHandler的订阅和取消订阅;Spring Messaging 定义了DestinationResolver接口用来选择消息的目的地,消息的目的地可以是Pipe(MessageChannel),也可以是Filter(MessageHandler);
- AbstractMessageProducingHandler:可以指定一个outputChannel,处理完消息之后的结果发送到此Channel中;
- AbstractReplyProducingMessageHandler:不用指定outputChannel,inputChannel就是outputChannel;
- AbstractReplyProducingPostProcessingMessageHandler:处理完消息之后,在发送结果到outputChannel;
Spring Integration
Spring Integration 提供了 Spring 编程模型的扩展用来支持企业集成模式(Enterprise Integration Patterns),是对 Spring Messaging 的扩展。
它提出了不少新的概念,包括消息路由MessageRoute、消息分发MessageDispatcher、消息过滤Filter、消息转换Transformer、消息聚合Aggregator、消息分割Splitter等等。同时还提供了MessageChannel和MessageHandler的实现,分别包括 DirectChannel、ExecutorChannel、PublishSubscribeChannel和MessageFilter、ServiceActivatingHandler、MethodInvokingSplitter 等内容。
Spring Cloud Stream
SCS 在 Spring Integration 的基础上进行了封装,提出了Binder, Binding, @EnableBinding, @StreamListener等概念。
SCS 与 Spring Boot Actuator 整合,提供了/bindings, /channelsendpoint。
SCS 与 Spring Boot Externalized Configuration 整合,提供了BindingProperties, BinderProperties等外部化配置类。
SCS 增强了消息发送失败的和消费失败情况下的处理逻辑等功能。
SCS 是 Spring Integration 的加强,同时与 Spring Boot 体系进行了融合,也是 Spring Cloud Bus 的基础。它屏蔽了底层消息中间件的实现细节,希望以统一的一套 API 来进行消息的发送/消费,底层消息中间件的实现细节由各消息中间件的 Binder 完成。
Binder是提供与外部消息中间件集成的组件,为构造Binding提供了 2 个方法,分别是bindConsumer和bindProducer,它们分别用于构造生产者和消费者。目前官方的实现有 Rabbit Binder 和 Kafka Binder, Spring Cloud Alibaba 内部已经实现了 RocketMQ Binder。
- Binders
- Bindings,绑定在外部消息传递系统(例如,队列、主题等)与应用程序提供的生产者和消费者之间提供了桥梁。
- Producers
- Consumers