Spring Cloud Stream消息处理机制学习笔记(一)

Spring 家族中三大消息处理相关框架关系图

Spring Cloud Stream消息处理机制学习笔记(一)

一.Spring Messaging
Spring Messaging 是 Spring 框架中的一个底层模块,用于提供统一的消息编程模型。消息抽象了一个接口来定义如下:

public interface Message<T> {
    //消息体
    T getPayload();
    //消息头
    MessageHeaders getHeaders();

}

 

而消息是要塞入到消息通道里面才能发送出去的,所以抽象出了一个MessageChannel其中的send()方法就是为我们来发送消息到通道(实质是队列的一种抽象和封装,队列并没有暴露给业务层)

public interface MessageChannel {

    long INDEFINITE_TIMEOUT = -1;

    default boolean send(Message<?> message) {

           return send(message, INDEFINITE_TIMEOUT);

    }

    boolean send(Message<?> message, long timeout);

}

支持轮询的 PollableChannel 和实现发布-订阅模式的 SubscribableChannel继承至MessageChannel

Spring Cloud Stream消息处理机制学习笔记(一)

//轮询主动获取消息
public interface PollableChannel extends MessageChannel { 

	    Message<?> receive(); 

	    Message<?> receive(long timeout);

}

	 
//发布-订阅通过回调MessageHandler实现
public interface SubscribableChannel extends MessageChannel { 

	    boolean subscribe(MessageHandler handler); 

	    boolean unsubscribe(MessageHandler handler);

}

二.Spring Cloud Stream 基本架构

Spring Cloud Stream消息处理机制学习笔记(一)

四个核心组件,分别是 Binder、Channel、Source 和 Sink,其中 Binder 和 Channel 成对出现,而 Source 和 Sink 分别面向消息的发布者和消费者。消息中间件这里默认集成了Kafka和RabbitMQ;

Source 和 Sink

public interface Source {

    String OUTPUT = "output";

    @Output(Source.OUTPUT)

    MessageChannel output();

}

Source组件是真正生成消息的组件相当于output组件,Sink组件是消费消息的组件,相当于input组件。

source组件会使用一个pojo实体来封装消息对象,然后序列号后发送到管道Channel里面,Sink通过一定的配置(yml文件配合配置类)和监听,当监听到管道中有消息可以消费,获取消息再反系列化成pojo实体类,业务代码就可以来处理逻辑了。

Channel

Channel 就是一个通道,实质是队列的一个抽象和封装。消息生成者将消息发送至这个通道,消息消费者从此通道拉取消息消费。

Binder

对于 Spring Cloud Stream 而言,最核心的无疑是 Binder 组件。顾名思义是粘合剂,将业务和消息传递粘合在一起。Binder是应用和消息之间的一种抽象。集成不同的消息中间(Kafka和RabbitMQ)件进行整合。

上一篇:面试官再问Android Framework,求你看完这份至尊级学习笔记怼他,全网最全!


下一篇:Android组件化架构实践,完整PDF