消息中间件

  1. 应用解耦
  2. 异步处理
  3. 流量削峰
  4. 日志处理

    什么是 Stream?

    Springcloud Stream 是一个构建消息驱动微服务的框架。说白了就是操作MQ的,可以屏蔽底层的MQ类型。

应用程序通过 inputs 或者 outputs 与 SpringCloud Stream 中 binder 对象交互。所以我们通过配置来绑定(binding),而 SpringCloud Stream 的 binder 对象负责与消息中间件交互。所以我们只需要了解如何与 Stream 的 binder 交互就可以了,屏蔽了与底层 MQ 交互。

SpringCloud Stream 为一些 MQ 提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的三个核心概念。

核心概念

  1. Middleware:中间件,指消息队列中间件。如 RabbitMQ、Kafka 等。
  2. Binder:目标绑定器,用于绑定某一个确定的消息队列中间件。
  3. @Input:标识输入通道,消息消费者接收的消息将通过该通过进入应用程序。
  4. @output:标识输出通道,消息生产者发布的消息将通过该通过进入应用程序。
  5. @StreamListener:监听队列,消费者队列的消息接收。
  6. @EnableBinding:标识绑定,将信道 channel 和交换机 exchange 绑定在一起。

    工作原理

    image.png

  7. Source:当需要发送消息时,我们就需要通过 Source.java,他会把我们要发送的消息进行序列化(默认转成 JSON 字符串),然后将这些数据发送到 Channel 中;

  8. Sink:当需要监听消息时,我们就需要通过 Sink.java,他负责从消息通道中获取消息,并将消息反序列化成消息对象,然后交给具体的消息监听处理;
  9. Channel:通常我们向消息中间件发送消息或者监听消息时需要指定主题(Topic)和消息队列名称,一旦我们需要变更主题就需要修改消息发送或消息监听的代码。通过 Channel 对象,我们的业务代码只需要对应 Channel 就可以了,具体这个 Channel 对应的是哪个主题,可以在配置文件中来指定,这样当主题变更的时候我们就不用对代码做任何修改,从而实现了与具体消息中间件的解耦;
  10. Binder:通过不同的 Binder 可以实现与不同的消息中间件整合,Binder 提供统一的消息收发接口,从而使得我们可以根据实际需要部署不同的消息中间件,或者根据实际生产中所部属的消息中间件来调整我们的配置。

    函数式编程

    https://www.imooc.com/article/315238