一、rocketMq的基本概念和模型
1、消息模型:
主要由producer、broker、nameserver
和consumer组成。
即消息生产、路由、中转和消费
2、主题(Topic)和标签(tag)
topic表示一类消息的集合, Topic 与 Tag 都是业务上用来归类的标识,区分在于 Topic 是一级分类,而 Tag 可以说是二级分类。
3、消息(Message):
每条消息必须属于一个主题。RocketMQ中每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。

二、rocketMq的功能特性

1、全局顺序其实是分区顺序的一个特例,就是只用Topic的一个分区。rocketMq提供了MessageQueueSelector。RocketMQTemplate则对其封装提供了发送带Orderly的方法,将hashKey的值直接固定即可。
2、生产者流控, broker通过拒绝send 请求方式实现流量控制,生产者不会尝试消息重投。
有三种情形:1)、commitLog文件被锁时间超过osPageCacheBusyTimeOutMills时,参数默认为1000ms,返回流控。
2)、如果开启transientStorePoolEnable == true,且broker为异步刷盘的主机,且transientStorePool中资源不足,拒绝当前send请求,返回流控。
3)、broker每隔10ms检查send请求队列头部请求的等待时间,如果超过waitTimeMillsInSendQueue,默认200ms,拒绝当前send请求,返回流控。
消费者流控:
1)、消费者本地缓存消息数超过pullThresholdForQueue时,默认1000。
2)、消费者本地缓存消息大小超过pullThresholdSizeForQueue时,默认100MB。
3)、消费者本地缓存消息跨度超过consumeConcurrentlyMaxSpan时,默认2000。
3、重投和重试超过次数
重投:retryTimesWhenSendFailed:同步发送失败重投次数,默认为2,因此生产者会最多尝试发送retryTimesWhenSendFailed + 1次。retryTimesWhenSendAsyncFailed
异步重试次数,同步会在不同broker上重试,异步只会在一个上重试。
重试:失败少于16次在重试队列,RETRY开头+connsumergroupId,超过16次就放入死信队列中
4、过滤: