【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只会启动一次。
【mq读书笔记】mq消息消费的更多相关文章
- 【mq读书笔记】消息消费队列和索引文件的更新
ConsumeQueue,IndexFile需要及时更新,否则无法及时被消费,根据消息属性查找消息也会出现较大延迟. mq通过开启一个线程ReputMessageService来准时转发commitL ...
- 【mq读书笔记】消息消费过程(钩子 失败重试 消费偏移记录)
在https://www.cnblogs.com/lccsblog/p/12249265.html中,PullMessageService负责对消息队列进行消息拉取,从远端服务器拉取消息后将消息存入P ...
- 【mq读书笔记】消息拉取
疑问:PullRequest何时添加? PullMessageService提供延迟添加与立即添加2种方式 疑问:PullRequest是在什么时候创建的呢? 1.上上图中 PullRequest p ...
- 【mq读书笔记】消息队列负载与重新分配(分配 新队列pullRequest入队)
回顾PullMessageService#run: 如果队列总没有PullRequest对象,线程将阻塞. 围绕PullRequest有2个问题: 1.PullRequest对象在什么时候创建并加入p ...
- 【mq读书笔记】消息拉取长轮训机制(Broker端)
RocketMQ并没有真正实现推模式,而是消费者主动想消息服务器拉取消息,推模式是循环向消息服务端发送消息拉取请求. 如果消息消费者向RocketMQ发送消息拉取时,消息未到达消费队列: 如果不启用长 ...
- 【mq读书笔记】消息确认(失败消息,定时队列重新消费)
接上文的集群模式,监听器返回RECONSUME_LATER,需要将将这些消息发送给Broker延迟消息.如果发送ack消息失败,将延迟5s后提交线程池进行消费. 入口:ConsumeMessageCo ...
- 【mq读书笔记】消息过滤机制
mq支持表达式过滤和类过滤两种模式,其中表达式又分为TAG和SQL92.类过滤模式允许提交一个过滤类到FilterServer,消息消费者从FilterServer拉取消息,消息经过FilterSer ...
- 【mq读书笔记】消息到达唤醒挂起线程检查新消息
DefaultMessageStore#start 当新消息到达CommitLog是,ReputMessageService线程负责将消息转发给ConsumeQueue,IndexFile,如果Bro ...
- 【mq读书笔记】mq事务消息
关于mq食物以什么样的方式解决了什么样的问题可以参考这里: https://www.jianshu.com/p/cc5c10221aa1 上文中示例基于mq版本较低较新的版本中TransactionL ...
随机推荐
- STM32入门系列-GPIO概念介绍
GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出.STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯 ...
- RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
问题 在用pytorch跑生成对抗网络的时候,出现错误Runtime Error: one of the variables needed for gradient computation has b ...
- Liquibase+SpringBoot的简单使用笔记!update+rollback
该笔记记录了springboot整合liquibase之后,如何根据liquibase ChangeLogFile对数据库进行修改以及回滚操作 参考: baeldung.com JHipster 1. ...
- python开发基础(一)-if条件判断,while循环,break,continue,
条件语句 (1)if 基本语句 if 条件 : 内部代码块 else: .... print() (2)if 嵌套 (3)if elif 语句 (4)if 1==1: pass # if不执行,pas ...
- Java并发(一):线程
目录 一.什么是线程 二.中断线程 三.线程状态 四.线程属性 前言: 本文将简单的介绍JAVA并发中的线程. 操作系统的多任务(multitasking):计算机在同一刻运行多个程序的能力,即并发. ...
- Prometheus安装配置
一.什么是Prometheus? Prometheus受启发于Google的Brogmon监控系统(相似的Kubernetes是从Google的Brog系统演变而来),从2012年开始由前Google ...
- Docker 基础 B站 学习 最强 教程
狂神说!! https://www.bilibili.com/video/BV1og4y1q7M4
- cmd的基本命令
使用方法Windows键+R键输入cmd回车 Windows 系统常用小工具 工具名称 cmd 命令 含义 计算器 calc 与 "工具名称" 相同 记事本 notepad 与 & ...
- Netlink 内核实现分析 1
Netlink 是一种IPC(Inter Process Commumicate)机制,它是一种用于内核与用户空间通信的机制,在一般情况下,用户态和内核态通信会使用传统的Ioctl.sysfs属性文件 ...
- grep/字符/次数匹配/锚定符/小大括号/wc/tr/cut/sort/uniq
grep:正则表达式,文本过滤工具,能够实现以指定的"模式(Pattern)"逐行搜索文件中的内容,并将匹配到的行显示出来. 模式:是由正则表达式的元字符,其他字符组合起来的匹配字 ...