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

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

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

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

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只会启动一次。

【mq读书笔记】mq消息消费的更多相关文章

  1. 【mq读书笔记】消息消费队列和索引文件的更新

    ConsumeQueue,IndexFile需要及时更新,否则无法及时被消费,根据消息属性查找消息也会出现较大延迟. mq通过开启一个线程ReputMessageService来准时转发commitL ...

  2. 【mq读书笔记】消息消费过程(钩子 失败重试 消费偏移记录)

    在https://www.cnblogs.com/lccsblog/p/12249265.html中,PullMessageService负责对消息队列进行消息拉取,从远端服务器拉取消息后将消息存入P ...

  3. 【mq读书笔记】消息拉取

    疑问:PullRequest何时添加? PullMessageService提供延迟添加与立即添加2种方式 疑问:PullRequest是在什么时候创建的呢? 1.上上图中 PullRequest p ...

  4. 【mq读书笔记】消息队列负载与重新分配(分配 新队列pullRequest入队)

    回顾PullMessageService#run: 如果队列总没有PullRequest对象,线程将阻塞. 围绕PullRequest有2个问题: 1.PullRequest对象在什么时候创建并加入p ...

  5. 【mq读书笔记】消息拉取长轮训机制(Broker端)

    RocketMQ并没有真正实现推模式,而是消费者主动想消息服务器拉取消息,推模式是循环向消息服务端发送消息拉取请求. 如果消息消费者向RocketMQ发送消息拉取时,消息未到达消费队列: 如果不启用长 ...

  6. 【mq读书笔记】消息确认(失败消息,定时队列重新消费)

    接上文的集群模式,监听器返回RECONSUME_LATER,需要将将这些消息发送给Broker延迟消息.如果发送ack消息失败,将延迟5s后提交线程池进行消费. 入口:ConsumeMessageCo ...

  7. 【mq读书笔记】消息过滤机制

    mq支持表达式过滤和类过滤两种模式,其中表达式又分为TAG和SQL92.类过滤模式允许提交一个过滤类到FilterServer,消息消费者从FilterServer拉取消息,消息经过FilterSer ...

  8. 【mq读书笔记】消息到达唤醒挂起线程检查新消息

    DefaultMessageStore#start 当新消息到达CommitLog是,ReputMessageService线程负责将消息转发给ConsumeQueue,IndexFile,如果Bro ...

  9. 【mq读书笔记】mq事务消息

    关于mq食物以什么样的方式解决了什么样的问题可以参考这里: https://www.jianshu.com/p/cc5c10221aa1 上文中示例基于mq版本较低较新的版本中TransactionL ...

随机推荐

  1. ubuntu20.04 编译安装ckermit

    ubuntu20.04编译安装ckermit 我呢之前一直使用的是ubuntu18.04,最近在安装了某个软件之后,再加上自己的操作不当最终导致ubuntu系统卡死无法进入桌面环境,早就想更新20.0 ...

  2. httpx和requests之间有什么区别?

    requests只能发送同步请求,httpx能够发送同步和异步请求. httpx的api和requests是兼容的,切换的成本几乎是零.在异步模式下,测试大量接口的话,httpx的速度是能够显著得到提 ...

  3. LoRa技术的特点和组成系统分析

    目前,基于LoRa技术的网络层协议主要是LoRaWAN,也有少量的非LoRaWAN协议,但是通信系统网络都是星状网架构,以及在此基础上的简化和改进.主要包括以下3种. (1)点对点通信. 一点对一点通 ...

  4. 20200722_Oracle添加表空间、用户,用户授权

    --创建表空间 CREATE TABLESPACE aifu --表空间名 aifu LOGGING DATAFILE 'D:\dev_config\OracleTableSpaces\aifu.DB ...

  5. 设计Twitter 时间线

    「design Twitter」是 LeetCode 上第 335 道题目,不仅题目本身很有意思,而且把合并多个有序链表的算法和面向对象设计(OO design)结合起来了,很有实际意义,本文就带大家 ...

  6. Parameter 'name' implicitly has an 'any' type.

    出现在vue3版本 找到tsconfig.json文件 增加"noImplicitAny":flase,或把"strict":true改成"stric ...

  7. 关于ubuntu出现的一些问题的解决方法

    1. (1)现象: dpkg: 处理软件包 linux-image-4.15.0-36-generic (--configure)时出错: 子进程 已安装 post-installation 脚本 返 ...

  8. 面试官问我redis数据类型,我回答了8种

    面试官:小明呀,redis 有几种数据结构呀? 小明:8 种 面试官:那你说一下分别是什么? 小明:raw,int,ht,zipmap,linkedlist,ziplist,intset,skipli ...

  9. 内网渗透 day8-linux提权和后门植入

    linux提权和后门植入 目录 1. 脏牛漏洞复现 3 (1) 去网上把代码复制然后touch一个.c文件,vi或者vim打开将代码复制进去保存 3 (2) 进入shell然后从kali开的apach ...

  10. Mysql之存储过程与存储函数

    1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语 ...