常用的消息中间件支持模型
中间件 | push模型 | pull模型 |
---|---|---|
RabbitMQ | 支持 | 支持 |
Kafka | – | 支持(只有) |
RocketMQ | 支持 | 支持 |
两种模型优缺点对比
- 所谓 Push 模型,即当 Producer 发出的消息到达后,服务端马上将这条消息投递给 Consumer;
- 而 Pull 则是服务端收到这条消息后什么也不做,只是等着 Consumer 主动到自己这里来读,即 Consumer 这里有一个“拉取”的动作。
Push模型优缺点
Push模型优点
实时(因为服务端Broker一旦收到消息,就会发送给消费者,不管消费这准备好没有,消费者是死是活,缓存到消费端的BlockingQueue中)
Push缺点
- 消息保存在服务端broker,容易造成消息堆积。
- 服务端broker需要维护每次传输状态,遇到问题需要重试。
- 服务端broker需要依据订阅者消费能力做流控(流转机制)。
Pull模型优缺点
Pull模型优点
保存在消费端,获取消息方便。(什么保存在消费端)
[2] 传输失败,不需要重试。(如何理解?)
[3] 消费端可以根据自身消费能力决定是否pull(流转机制) (这个好理解)
Pull缺点
默认的短轮询方式的实时性依赖于pull间隔时间,间隔越大,实时性越低,长轮询方式和push一致。(默认的端轮训指的是什么? 指的当长时间没有消息时,消费端实现的间隔时间去服务端轮训消息的过程)