消息中间件——pull和push

常用的消息中间件支持模型

中间件 push模型 pull模型
RabbitMQ 支持 支持
Kafka 支持(只有)
RocketMQ 支持 支持

两种模型优缺点对比

  • 所谓 Push 模型,即当 Producer 发出的消息到达后,服务端马上将这条消息投递给 Consumer;
  • 而 Pull 则是服务端收到这条消息后什么也不做,只是等着 Consumer 主动到自己这里来读,即 Consumer 这里有一个“拉取”的动作。

Push模型优缺点

Push模型优点

实时(因为服务端Broker一旦收到消息,就会发送给消费者,不管消费这准备好没有,消费者是死是活,缓存到消费端的BlockingQueue中)

Push缺点

  1. 消息保存在服务端broker,容易造成消息堆积。
  2. 服务端broker需要维护每次传输状态,遇到问题需要重试。
  3. 服务端broker需要依据订阅者消费能力做流控(流转机制)。

Pull模型优缺点

Pull模型优点
保存在消费端,获取消息方便。(什么保存在消费端)
[2] 传输失败,不需要重试。(如何理解?)
[3] 消费端可以根据自身消费能力决定是否pull(流转机制) (这个好理解)

Pull缺点
默认的短轮询方式的实时性依赖于pull间隔时间,间隔越大,实时性越低,长轮询方式和push一致。(默认的端轮训指的是什么? 指的当长时间没有消息时,消费端实现的间隔时间去服务端轮训消息的过程)

文章目录
  1. 1. 常用的消息中间件支持模型
  2. 2. 两种模型优缺点对比
    1. 2.1. Push模型优缺点
    2. 2.2. Pull模型优缺点
|