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

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

一.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

//轮询主动获取消息
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 基本架构

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

SourceSink

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)件进行整合。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值