RocketMQ总篇
![](https://img.haomeiwen.com/i13381980/73d7531b8804361e.png)
![](https://img.haomeiwen.com/i13381980/859c26e0cb246cee.png)
名词
- Topic:消息主题,一级消息类型,通过 Topic 对消息进行分类。详情请见Topic 与 Tag 最佳实践。
- Tag:消息标签,二级消息类型,用来进一步区分某个 Topic 下的消息分类。详情请见Topic 与 Tag 最佳实践。
- Message:消息,消息队列中信息传递的载体。
- Message ID:消息的全局唯一标识,由消息队列 RocketMQ 系统自动生成,唯一标识某条消息。
- Message Key:消息的业务标识,由消息生产者(Producer)设置,唯一标识某个业务逻辑。
- Group:一类 Producer 或 Consumer,这类 Producer 或 Consumer 通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。
一个完整的消息过程
发送 -- 存储 -- 消费
- Provider 通过NameServer获取到Broker信息和路由信息,和一个Broker建立长连接
- Provider 根据设定的Topic,轮询的在Topic的Queue下发送消息
- 默认同步消息,如果发送失败会重试2次或者超时,如果发送成功,会返回一个sendStatus为SEND_OK
- Broker把消息持久化的保存下来,并且对Consumer可见
- Consumer会定时的从Consumer Queue里面拉取消息到本地的线程池
- 消息成功的被消费之后,会response给Broker,消费成功,MQ会标记已经被成功消费过的消息,保证不会被重复消费
特点
-
灵活可扩展性:RocketMQ 天然支持集群,其核心四组件(Name Server、Broker、Producer、Consumer)每一个都可以在没有单点故障的情况下进行水平扩展。
-
海量消息堆积能力:RocketMQ 采用零拷贝原理实现超大的消息的堆积能力,据说单机已可以支持亿级消息堆积,而且在堆积了这么多消息后依然保持写入低延迟。
-
支持顺序消息:可以保证消息消费者按照消息发送的顺序对消息进行消费。顺序消息分为全局有序和局部有序,一般推荐使用局部有序,即生产者通过将某一类消息按顺序发送至同一个队列来实现。
-
多种消息过滤方式:消息过滤分为在服务器端过滤和在消费端过滤。服务器端过滤时可以按照消息消费者的要求做过滤,优点是减少不必要消息传输,缺点是增加了消息服务器的负担,实现相对复杂。消费端过滤则完全由具体应用自定义实现,这种方式更加灵活,缺点是很多无用的消息会传输给消息消费者。
-
支持事务消息:RocketMQ 除了支持普通消息,顺序消息之外还支持事务消息,这个特性对于分布式事务来说提供了又一种解决思路。
-
回溯消费:回溯消费是指消费者已经消费成功的消息,由于业务上需求需要重新消费,RocketMQ 支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯。
消息的类型
http://rocketmq.apache.org/docs/simple-example/
按照发送的特点分:
- 同步消息
- 异步消息
- 单向消息
按照使用功能特点分:
- 普通消息()
- 顺序消息
- 广播消息
- 延时消息
- 批量消息
- 事务消息
按照Broker和Consumer的关系:
- 订阅模式
- 广播模式
支持的功能
- Pub/Sub messaging model
- Scheduled message delivery
- Message retroactivity by time or offset
- Log hub for streaming
- Big data integration
- Reliable FIFO and strict ordered messaging in the same queue
- Efficient pull&push consumption model
- Million-level message accumulation capacity in a single queue
- Multiple messaging protocols like JMS and OpenMessaging
- Flexible distributed scale-out deployment architecture
- Lightning-fast batch message exchange system
- Various message filter mechanics such as SQL and Tag
- Docker images for isolated testing and cloud isolated clusters
- Feature-rich administrative dashboard for configuration, metrics and monitoring
默认参数
4.3.0版本的源码
- 发送消息超时时间默认3s
- 发送消息失败重试的次数2次,一共就是3次(正常一次,重试2次)
- 默认QueueNums:4
- 事务消息MQ的重试次数默认是15次,可以通过设置transactionCheckMax设置
private int sendMsgTimeout = 3000;
private int retryTimesWhenSendFailed = 2;
private int retryTimesWhenSendAsyncFailed = 2;
private volatile int defaultTopicQueueNums = 4;
private int compressMsgBodyOverHowmuch = 1024 * 4;
private int maxMessageSize = 1024 * 1024 * 4; // 4M
消息堆积
https://blog.csdn.net/yinni11/article/details/80531970
- 消息在MQ里面堆积(官方文档说是具有万亿级别的堆积容量)
- Consumer有专门的线程从Broker拉取Message,并且丢到自己的线程池里面做堆积,拉取过程中如果发现消息数据条数超过1000条,或者消息量超过100M,那么我们就暂停消息拉取,延迟50ms后再次发起任务拉取
Apache RocketMQ is a distributed messaging and streaming platform with low latency, high performance and reliability,
trillion-level capacity and flexible scalability.
参考
完整的介绍RMQ
https://www.jianshu.com/p/e5cfb4ba925e
阿里云官方英文、最新的Demo和Guidence
http://rocketmq.apache.org/docs/transaction-example/
阿里云的帮助文档啊,超级详细而且有Demo
https://help.aliyun.com/document_detail/29551.html
阿里云在github上的Demos(包括整合Spring 和简单TCP的形式)
https://github.com/AliwareMQ/mq-demo
简单且有Demo的简书博客系列,里面还有Dubbo先关的博客,非常好
https://www.jianshu.com/u/8e1110d27153
零度的RMQ系列博客
https://mp.weixin.qq.com/s/lxzD8HZofMuMRKS-zcP85A
官方API
http://rocketmq.apache.org/docs/simple-example/
RocketMQ和Kafak的区别
https://mp.weixin.qq.com/s/KfBruI-tOz-eJuM2fgqyew
java快速入门
https://www.cnblogs.com/jiangxinlingdu/p/7892593.html
RocketMQ 4.3发布,支持分布式事务 还有分布式事务的常见解决方案
https://baijiahao.baidu.com/s?id=1607829339793465291&wfr=spider&for=pc
10分钟超级详细的入门
http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/
网友评论