【mq读书笔记】mq消息消费

消息消费以组的的模式开展;

一个消费组内可以包含多个消费者,每一个消费组可订阅多个主题;

消费组之间有集群模式与广播模式两种消费模式:集群模式-主题下的同一条消息只允许被其中一个消费者消费。广播模式-主题下的同一条消息将被集群内的所有消费者消费一次。集群模式下消息队列负载机制遵循一个通用的思想:一个消息队列同一时间只允许被一个消息消费者消费,一个消费者可以消费多个消息队列。

消息服务器与消费者之间的消息传送也有两种方式 推模式,拉模式:拉模式-消费端主动发起啦消息请求。推模式-消息到达服务器后,推送给消息消费者。推模式的实现基于拉模式,在拉模式上包装一层,一个拉取任务完成后开始下一个拉取任务。

mq支持局部顺序消息消费,也就是保证同一个消息队列上的消息顺序消费。不支持消息全局顺序消费。

mq支持两种消息过滤模式:表达式与类过滤模式。

 

推模式:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DefaultMQPushConsumer核心属性:

1.consumerGroup:消费者所属组

2.messageModel:消息消费者模式,分为集群模式,广播模式,默认为集群模式

3.consumeFromWhere:根据消息进度从消息服务器拉取不到消息时重新计算消费策略

 

 

 

只有在从消息进度服务OffsetStore读取到MessageQueue中的偏移量小于0时,上述策略才会生效

4.allocateMessageQueueStrategy:集群模式下消息队列负载策略。

5.subscription:订阅信息

6.messageListener:消息业务监听器

7.offsetStore:消息消费进度存储器

8.consumeThreadMin=20:消息者最小线程数

9.consumeThreadMax=64:消费者最大线程数

10.consumeConcurrentlyMaxSpan:并发消息消费时处理队列最大跨度,默认2000,表示如果消息处理队列中偏移量最大的消息与偏移量最小的消息的跨度超过2000则延迟50ms后再拉取消息。

11.pullThresholdForQueue:默认值1000,每1000次流控后打印流控日志。

12.pullInterval=0:推模式下拉取任务间隔时间,默认一次拉取任务完成继续拉取

13.pullBatchSize:每次消息拉取所拉取的条数,默认32条

14.consumeMessageBatchMaxSize::消息并发消费时一次消费消息条数,就是每次传入MessageListtener#consumeMessage中的消息条数

15.postSubscriptionWhenPull:是否每次拉取消息都更新订阅消息,默认false

16.maxReconsumeTimes = -1:最大消费重试次数。如果消息消费次数超过,还未成功,则将该消息转移到一个失败队列,等待被删除。

17.suspendCurrentQueueTimeMillis:延迟将该队列的消息提交到消费者县城的等待时间,默认1s

18.consumeTimeout = 15:消息消费超时时间默认15分钟。

例子:

 

 

看一下start()方法

 

 

 

 

 

 

 

构建主题订阅信息SubscriptionData并加入到RebalanceImpl的订阅消息中。订阅关系2个来源:subscribe和订阅重试主题消息。

 

初始化MQClientLnstance,RebalanceImple(消息重新负载实现类)等。

 

初始化消息进度,如果是集群模式,消息进度保存在Broker上;如果是广播模式,消费进度保存在消费端。

 

 

 

根据是否是顺序消费,创建消费端消费线程服务。ConsumeMessageService主要负责消息消费,内部维护一个线程池。

 

 

 

向MQClientInstance注册消费者,并启动MQClientInstance,在一个JVM中的所有消费者,生产者持有同一个MQClientInstance,MQClientInstance只会启动一次。

 

posted @ 2020-01-28 17:34  l2c  阅读(693)  评论(0)    收藏  举报