RocketMQ研究
一 关于MQ
1.1 什么是MQ
MQ全称为Message Queue,即消息队列
1.2 MQ应用场景
- 任务的异步处理
- 应用程序的节解耦合
- 日志收集
1.3 关于RocketMQ
RocketMQ是阿里开源的一款非常优秀中间件产品,脱胎于阿里的另一款队列技术MetaQ
二 市面上常用的MQ
ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ(rocketMQ)等
2.1 各个消息中间件的时机应用场景
2.1.1 RocketMQ的优缺点
2.1.1.1 优点
- 高可用、高吞吐量,海量消息堆积、低延迟性能高
- api与架构设计更加贴切业务场景
- 支持顺序、事务消息
- 支持消息过滤
- 支持重复消费
- 支持延迟消息
- 支持消息跟踪
- 支持集群、负载均衡
- 支持制定次数和时间间隔的失败消息重发
10.单机部署
2.1.1.2 缺点
- 生态圈相较差
- 消息吞吐量与消息堆积能力不如kafka
- 不支持主从自动切换
- 只支持java
2.1.2 RabbitMQ的优缺点
2.1.2.1 优点
- 支持AMQP协议
- 基于erlang语言开发,高并发性能较好
- 工作模式较为灵活
- 支持延迟消息
- 提供较为友好的后台管理页面
- 支持单机部署
2.1.2.2 缺点
- 不支持水平扩容
- 不支持事物
- 消息吞吐量差
- 当产生消息堆积,性能下降明显
- 消息重发机制需要收集设计
- 不支持消息重复消费
三 RocketMQ基础
3.1 组成结构
RocketMQ由生产者、消息队列、以及消费者单部分组成,他们之间的交互流程为显示消息队列brokder定时发送自身状态到NameServer,然后消息生产者请求NameServer获取消息队列brokder的地址,然后消息生产者将消息发送到brokder中的消息队列,而消费者Consumer订阅了brokder中的消息队列,通过拉去消息,获的生产者生产的消息;
3.2 RocketMQ 支持 3 种消息发送方式
- 同步消息
消息生产者项broker发送消息,执行的api时同步等待,知道broker服务器返回发送的结果 - 异步消息
消息生产者项broker发送消息时制定消息发送成功以及发送异常的回调方法,调用api后立即返回,生产者发送消息线程不堵塞,消息发送成功与否的回调任务在一个新的线程中执行 - 单向消息
生产者想broker发送消息,执行api时直接返回,不等待返回结果
3.3 RocketMQ 消息结构
RocketMQ的消息包括基础属性和扩展属性两部分:
基础属性:topic + 消息体(即消息的内容 ) + 消息flag
扩展属性: tag(用于消费消息时进行过滤)+keys (Message 索引键)
注意
Message 的基础属性主要包括消息所属主题 topic , 消息 Flag(RocketMQ 不做处理)、 扩展属性、消息体 。
3.4 RocketMQ 消费组有两种消费模式
1)集群模式
一个消费组内的消费者组成一个集群,主题下的一条消息只能被一个消费者消费。
2)广播模式
主题下的一条消息能被消费组下的所有消费者消费。
消费者和broker之间通过推模式和拉模式接收消息,推模式即broker推送给消费者,拉模式是消费者主动从broker 查询消息。
3.5 延迟消息
RocketMQ的延迟消息实现非常简单,只需要发送消息前设置延迟的时间,延迟时间存在十八个等级,调用setDelayTimeLevel()设置 与时间相对应的延迟级别即可。