一、消息队列
1.1 消息队列
为什么要使用消息队列?
- 消息 Message
网络中的两台计算机或者两个通讯设备之间传递的数据。例如说:⽂本、⾳乐、视频等内容。 - 队列 Queue
⼀种特殊的线性表(数据元素⾸尾相接),特殊之处在于只允许在⾸部删除元素和在尾部追加元素(FIFO)。⼊队、出队 - 消息队列 MQ
消息+队列,保存消息的队列。消息的传输过程中的容器;主要提供⽣产、消费接⼝供外部调⽤做数据的存储和获取。
1.2 消息队列的分类
MQ主要分为两类:点对点(p2p)、发布订阅(Publish/Subscribe)
- Peer-to-Peer
一般基于Pull或者Polling接收数据.
发送到队列中的消息被⼀个而且仅仅⼀个接收者所接收,即使有多个接收者在同⼀个队列中侦听同一消息,既支持异步“即发即收”的消息传递⽅式,也支持同步请求/应答传送方式。 - 发布订阅
发布到同⼀个主题的消息,可被多个订阅者所接收
发布/订阅即可基于Push消费数据,也可基于Pull或者Polling消费数据
解耦能力比P2P模型更强。
1.3 p2p和发布订阅MQ的比较
- 共同点
消息生产者生产消息发送到queue中,然后消息消费者从queue中读取并且消费消息 - 不同点
p2p模型包括:消息队列(Queue)、发送者(Sender)、接收者(Receiver)
⼀个生产者生产的消息只有⼀个消费者(Consumer)(即⼀旦被消费,消息就不在消息队列中)。比如说打电话。
pub/Sub包含:消息队列(Queue)、主题(Topic)、发布者(Publisher)、订阅者(Subscriber)
每个消息可以有多个消费者,彼此互不影响。
1.4 消息系统的使用场景
- 解耦 各系统之间通过消息系统这个统⼀的接⼝交换数据,⽆须了解彼此的存在
- 冗余 部分消息系统具有消息持久化能⼒,可规避消息处理前丢失的⻛险
- 扩展 消息系统是统⼀的数据接⼝,各系统可独立扩展
- 峰值处理能力 消息系统可顶住峰值流量,业务系统可根据处理能⼒从消息系统中获取并处理对应量的请求
- 可恢复性 系统中部分键失效并不会影响整个系统,它恢复会仍然可从消息系统中获取并处理数据
- 异步通信 在不需要⽴即处理请求的场景下,可以将请求放⼊消息系统&