11. 消息队列有几种投递方式?分别有什么优缺点
在 「消息队列由哪些角色组成?」 中,我们已经提到消息队列有 push 推送和 pull 拉取两种投递方式。
一种模型的某些场景下的优点,在另一些场景就可能是缺点。无论是 push 还是 pull ,都存在各种的利弊。
- push
- 优点,就是及时性。
- 缺点,就是受限于消费者的消费能力,可能造成消息的堆积,Broker 会不断给消费者发送不能处理的消息。
- pull
- 优点,就是主动权掌握在消费方,可以根据自己的消息速度进行消息拉取。
- 缺点,就是消费方不知道什么时候可以获取的最新的消息,会有消息延迟和忙等。
目前的消息队列,基于 push + pull 模式结合的方式,Broker 仅仅告诉 Consumer 有新的消息,具体的消息拉取,还是 Consumer 自己主动拉取。
其实这个问题,会告诉我们两个道理。
- 一个功能的实现,有多种实现方式,有优点就有缺点。并且,一个实现的缺点,恰好是另外一个实现的优点。
- 一个功能的实现,可能是多种实现方式的结合,取一个平衡点,不那么优,也不那么缺。? 再说一句题外话,是和否之间,还有灰色地方。