一、概述
消息队列(Message queue
),简称MQ
,是一种进程间通信或者同一进程的不同线程间的通信方式。通用的使用场景为:
不需要立即获取结果,但是并发量又要进行控制时。
二、使用场景
消息队列主要使用场景:
- 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,减少处理时间。
- 应用耦合:多应用对消息队列中同一消息进行处理,避免应用接口失败导致整个过程的失败。
- 限流削峰: 避免流量过大导致应用挂掉。
- 消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理. 多个子系统由消息队列连接起来,比如:日志处理.
三、消息队列的两种模式
消息队列包括两种模式,点对点模式(point to point, queue)和发布/订阅模式(publish/subscribe,topic).
点对点模式,主要是一个消息只有一个消费者.当消费者接收到消息后,向消息队列通知应答成功,消息队列将该消息从队列中删除.
点对点模式特点:
- 每个消息只有一个接收者(Consumer);
- 发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;
- 接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;
发布订阅模式,发布者将消息发送到Topic
,系统将这些消息传递给多个订阅者.
发布/订阅模式特点:
- 每个消息可以有多个订阅者;
- 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
- 为了消费消息,订阅者需要提前订阅,并保持在线运行;
当发布者消息量很大时,显然单个订阅者的处理能力是不足的,多个订阅者节点组成一个订阅组负载均衡消费topic
消息实现分组订阅.