前言
消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段。它具有 低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。
当前使用较多的 消息队列 有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分 数据库 如 Redis、MySQL 以及 phxsql 也可实现消息队列的功能。
1、基本构成
消息系统通常都会由生产者,消费者,Broker三大部分组成,生产者会将消息写入到Broker,消费者会从Broker中读取出消息,不同的MQ实现的Broker实现会有所不同,不过Broker的本质都是要负责将消息落地到服务端的存储系统中
2、消息队列的的传输模式
1:点对点模型
点对点模型 用于 消息生产者 和 消息消费者 之间 点到点 的通信。
消息生产者将消息发送到由某个名字标识的特定消费者。
这个名字实际上对于消费服务中的一个 队列(Queue),在消息传递给消费者之前它被 存储 在这个队列中。
队列消息 可以放在 内存 中也可以 持久化,以保证在消息服务出现故障时仍然能够传递消息。
特点:
- 每个消息只用一个消费者;
- 发送者和接受者没有时间依赖;
- 接受者确认消息接受和处理成功。
2:发布/订阅模型(Pub/Sub)
特性:
- 每个消息可以有多个订阅者;
- 客户端只有订阅后才能接收到消息;
- 持久订阅和非持久订阅。
注意:
- 发布者和订阅者有时间依赖:接受者和发布者只有建立订阅关系才能收到消息;
- 持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线;
- 非持久订阅:订阅者为了接受消息,必须一直在线。当只有一个订阅者时约等于点对点模式
3、消息队列技术对比
拓展: