一、MQ 概述
1、MQ 简介
MQ,Message Queue,是一种提供 消息队列服务
的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。
2、MQ 用途
可以查看到很多的关于 MQ
用途的叙述,总结起来以下三点:
- 限流削峰
- 异步解耦
- 数据收集
限流削峰 :MQ可以将系统的 超量
请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮。
异步解耦:上游系统对下游系统的调用若为同步调用,则会大大降低系统的吞吐量与并发度,且系统耦合度太高。而异步调用则会解决这些问题。所以两层之间若要实现由同步到异步的转化,一般性做法就是,在这两层间添加一个MQ层。
数据收集:分布式系统会产生海量级数据流,如:业务日志、监控数据、用户行为等。针对这些数据流进行实时或批量采集汇总,然后对这些数据流进行大数据分析
3、常见MQ
- ActiveMQ
- RabbitMQ
- Kafka
- RocketMQ
二、RocketMQ 概述
1、RocketMQ 简介
RocketMQ是一个统一消息引擎、轻量级数据处理平台。
RocketMQ是⼀款阿⾥巴巴开源的消息中间件。阿⾥巴巴向 Apache 软件基⾦会捐赠 RocketMQ,并孵化成 Apache 顶级项⽬。
2、RocketMQ 官网
官⽹地址:RocketMQ
三、RocketMQ 基本概念
1、消息(Message)
消息是指,消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。
2、主题(Topic)
一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。
一个生产者可以同时发送多种Topic的消息;而一个消费者只订阅和消费一种Topic的消息。
3、标签(Tag)
为消息设置的标签,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签。标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统。消费者可以根据Tag实现对不同子主题的不同消费逻辑,实现更好的扩展性。
可以说 Topic 是消息一级分类,Tag 是消息二级分类。
4、队列(Queue)
存储消息的物理实体。一个Topic中可以包含多个Queue,每个Queue中存放的就是该Topic的消息。
一个Topic的Queue中的消息只能被一个消费者组中的一个消费者消费。
一个Queue中的消息不允许同一个消费者组中的多个消费者同时消费。
5、消息标识(MessageId/Key)
RocketMQ中每个消息拥有唯一的MessageId,且可以携带具有业务标识的Key,以方便对消息的查询。
不过需要注意的是,MessageId有两个:在生产者 send()
消息时会自动生成一个MessageId(msgId),当消息到达Broker后,Broker也会自动生成一个MessageId (offsetMsgId)。
msgId、offsetMsgId 与 key 都称为消息标识。