![](https://cdn.zimug.com/wx-zimug.png) 本文对应视频:https://www.bilibili.com/video/BV1Fu411y73E/ [TOC] ## 一、消息传递模型 通常来说,消息队列的消息传递模型主要有两种: 1、Point-to-Point(P2P),一条消息由一个消费者消费。 2、Publish/Subscribe(Pub/Sub),一条消息被多个消费者消费。 ### 1. P2P模型(点对点模型) 在P2P(点对点)模型中,一条消息仅能被一个消费者进行消费。消息队列负责接收生产者发布消息,同时支持消费者从队列中获取消息。 ![](http://cdn.zimug.com/d9ac9fbc5e68c64cdacdc6022c8f0b6d) P2P的特点: 1. 每个消息只能被一个消费者(Consumer)消费。也就是说,消息被处理一次,并且仅被处理一次。 2. 生产者和消费者之间是不存在耦合关系的,生产者向消息队列发送了消息之后,不论消费者是否处于运行状态,都不会影响到消息被发送到消息队列中。 3. 可能会有多个消费者侦听同一个队列,但是队列中的某一个消息只能被其中一个消费者所消费。 4. 消费者在成功消费消息之后需要向队列进行应答反馈,所以如果你需要保证消息传递的可靠性,那么你需要使用P2P模式的消息队列。 5. 消息按照顺序依次放入消息队列中,消息队列按照先进先出的原则把消息传送给消费者(除非使用了特殊消息优先级设置,否则一律遵循该原则)。 ![](http://cdn.zimug.com/7a064fbb2788207f0447026ba2c3aea5) 集群消费模式(消费者组模式),是为了提高吞吐量,针对同一个队列或消费主题,存在多个消费者。多个消费者组成一个消费者组,尽量均衡的消费消息队列中的消息。消费者组模式本质上仍然是P2P模式,消息被消费者组内的某一个消费者处理一次,并且仅被处理一次。 但是消费者组消费的模式和基础的P2P模式,还是有一些区别:**就是消费者组模式通常无法保证消费的顺序。** ### 2.Publish/Subscribe模型(发布订阅模型) 在Pub / Sub(发布订阅)模型中,一条消息被多个消费者(订阅者)消费,这个消费过程就像是广播。生产者(发布者)就像是广播员,消费者(订阅者)就像是听众。 ![](http://cdn.zimug.com/bb092ae1bc529360b5a61b803d1d93be) Publish/Subscribe的特点: 1. 每个消息可以被多个消费者(或消费者组)进行消费,这个过程通常被称为“订阅”,消费者也被称为订阅者; 2. 消息发布者通常不会知道、也感知不到哪些订阅者正在接收该主题的消息。消息的发布者就像是一个新闻播音员,新闻我是播完了,哪些观众看、哪些观众没看就和播音员关系不大了。就像听众不需要向播音员反馈信息,消息发布者也不需要等待消息订阅者的反馈。