ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-05-24 23:00:15  阅读:269  来源: 互联网

标签:Stream Spring Source Binder 消息 组件 MessageChannel Cloud


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;

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

标签:Stream,Spring,Source,Binder,消息,组件,MessageChannel,Cloud
来源: https://blog.csdn.net/wu_foot/article/details/116979488

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有