RocketMQ是由阿里捐赠给Apache的一款低延迟、高并发、高可用、高可靠的分布式消息中间件。经历了淘宝双十一的洗礼。RocketMQ既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。
1.什么是消息队列
消息队列(Message Queue),从广义上讲是一种消息队列服务中间件,提供一套完整的信息生产、传递、消费的软件系统,如图所示:

一句话总结:消息中间件不生产消息,只是消息的搬运工。
2.消息中间件的应用场景
- 应用解耦:系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。
- 流量削峰:应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提到系统的稳定性和用户体验。互联网公司的大促场景(双十一、店庆活动、秒杀活动)都会使用到MQ。
- 数据分发:通过消息队列可以让数据在多个系统更加之间进行流通。数据的产生方不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可。接口调用的弊端,无论是新增系统,还是移除系统,代码改造工作量都很大。
3.RocketMQ各部分角色介绍

- NameServer:NameServer是整个RocketMQ的“大脑”,它是RocketMQ的服务注册中心,所以RocketMQ需要先启动NameServer再启动Rocket中的Broker。
- Broker在启动时向所有NameServer注册(主要是服务器地址等),生产者在发送消息之前先从NameServer获取Broker服务器地址列表(消费者一样),然后根据负载均衡算法从列表中选择一台服务器进行消息发送。
- 主机(Broker):RocketMQ的核心,用于暂存和传输消息。
- 生产者(Producer):也称为消息发布者,负责生产并发送消息至RocketMQ。
- 消费者(Consumer):也称为消息订阅者,负责从RocketMQ接收并消费消息。
- 消息(Message):生产或消费的数据,对于RocketMQ来说,消息就是字节数组。
4.常见消息队列对比
