消息中间件
应用程序通过 inputs 或者 outputs 与 SpringCloud Stream 中 binder 对象交互。所以我们通过配置来绑定(binding),而 SpringCloud Stream 的 binder 对象负责与消息中间件交互。所以我们只需要了解如何与 Stream 的 binder 交互就可以了,屏蔽了与底层 MQ 交互。
SpringCloud Stream 为一些 MQ 提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的三个核心概念。
核心概念
- Middleware:中间件,指消息队列中间件。如 RabbitMQ、Kafka 等。
- Binder:目标绑定器,用于绑定某一个确定的消息队列中间件。
- @Input:标识输入通道,消息消费者接收的消息将通过该通过进入应用程序。
- @output:标识输出通道,消息生产者发布的消息将通过该通过进入应用程序。
- @StreamListener:监听队列,消费者队列的消息接收。
@EnableBinding:标识绑定,将信道 channel 和交换机 exchange 绑定在一起。
工作原理
Source:当需要发送消息时,我们就需要通过 Source.java,他会把我们要发送的消息进行序列化(默认转成 JSON 字符串),然后将这些数据发送到 Channel 中;
- Sink:当需要监听消息时,我们就需要通过 Sink.java,他负责从消息通道中获取消息,并将消息反序列化成消息对象,然后交给具体的消息监听处理;
- Channel:通常我们向消息中间件发送消息或者监听消息时需要指定主题(Topic)和消息队列名称,一旦我们需要变更主题就需要修改消息发送或消息监听的代码。通过 Channel 对象,我们的业务代码只需要对应 Channel 就可以了,具体这个 Channel 对应的是哪个主题,可以在配置文件中来指定,这样当主题变更的时候我们就不用对代码做任何修改,从而实现了与具体消息中间件的解耦;
- Binder:通过不同的 Binder 可以实现与不同的消息中间件整合,Binder 提供统一的消息收发接口,从而使得我们可以根据实际需要部署不同的消息中间件,或者根据实际生产中所部属的消息中间件来调整我们的配置。
函数式编程
https://www.imooc.com/article/315238