01 2020 档案
摘要:疑问:PullRequest何时添加? PullMessageService提供延迟添加与立即添加2种方式 疑问:PullRequest是在什么时候创建的呢? 1.上上图中 PullRequest pullRequest = this.pullRequestQueue.take(); this.pu
阅读全文
摘要:消息消费以组的的模式开展; 一个消费组内可以包含多个消费者,每一个消费组可订阅多个主题; 消费组之间有集群模式与广播模式两种消费模式:集群模式-主题下的同一条消息只允许被其中一个消费者消费。广播模式-主题下的同一条消息将被集群内的所有消费者消费一次。集群模式下消息队列负载机制遵循一个通用的思想:一个
阅读全文
摘要:broker不会关注这个文件上的消息是否全部被消费。默认每个文件的过期时间为72小时。
阅读全文
摘要:索引文件的刷盘并不是采取定时刷盘机制,而是每更新一次索引文件就会将上一次的改动刷写到磁盘。 同步刷盘: GroupCommitRequest将被提交到GroupCommitService线程,GroupCommitService线程处理GroupCommitRequest对象后将调用wakeupCu
阅读全文
摘要:考虑转发任务未成功执行,此时消息服务器Broker宕机,导致commitlog,consumeQueue,IndexFile文件数据不一致。 commitlog,consumeQueue遍历每一条消息,将flushedPosition,committedWhere设置到最后一条正常消息处,并删除在这
阅读全文
摘要:ConsumeQueue,IndexFile需要及时更新,否则无法及时被消费,根据消息属性查找消息也会出现较大延迟。 mq通过开启一个线程ReputMessageService来准时转发commitLog文件更新事件,相应的任务处理器根据转发的消息及时更新ConsumeQueue,IndexFile
阅读全文
摘要:记录comitlog,consumeQueue,Index文件的刷盘时间点,文件固定长度4k,其中只用该文件的24个字节,其存储格式: 8字节physicMsgtimestamp+8字节logicsMsgTimestamp+8字节indexMsgTimestamp physicMsgtimestam
阅读全文
摘要:1.IndexHeader头部,40字节,记录IndexFile的统计信息: begainTimestamp:该索引文件中包含消息的最小存储时间 endTimestamp:该索引文件中包含消息的最大存储时间 begainPhyoffset:该索引文件中包含消息的最大物理偏移量(commitlog文件
阅读全文
摘要:存储文件 启动broker之后我们可以看到下面这些文件 1.config包含了运行期间一些配置信息,主要包括下列信息。 consumerFilter.json:主体消息过滤信息 consumerOffset.json:集群消费模式消息消费进度 delayOffset.json:延时消息队列拉取进度
阅读全文
摘要:总得来说 有些像页高速缓存那样,为了避免页面被换出到交换区,mq申请了一块内存,并且用指定这些页面不能被操作系统换出,然后将这些内存分配给业务使用:
阅读全文
摘要:表结构如下: 待优化sql执行情况如下: 去掉其中一个不带索引的字段执行结果如下: 查看执行计划: 尝试强制走callOutTime索引时间更长了: 《回头看》:不走索引和强制走索引之后时间更长的原因可能是:mysql判断使用callOutTime时 需要回表的成本已经大于全表扫了 所以没有走索引
阅读全文
摘要:MappedFileQueue的封装 MappedFileQueue是MappedFile的管理容器,MappedFileQueue是对存储目录的封装。 查找MappedFile: 1.根据时间戳来查找MappedFile: 2.根据消息偏移量offset查找MappedFile mq采用定时删除策
阅读全文
摘要:comitlog文件 ConsumerQueue文件 IndexFile文件 RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件。 为了提高消息消费的效率RocketMQ引入了ConsumeQueue消息队列文件,每个消息主题包含一个多个消息消费队列,每一个消费队列有一个消
阅读全文
摘要:RemotingCommand: flag倒数第一位表示请求类型,0请求1返回。倒数第二位1.表示oneway 单条消息发送时,消息体的内容将保存在body种,批量消息发送,需要将多条消息体的内容存储在body中,RocketMQ采取的方式是,对单条消息内容使用固定格式进行存储 首先调用batch方
阅读全文
摘要:钩子的注册: DefaultMQProducerImpl#registerSendMessageHook注册钩子处理类,可注册多个。 public SendResult sendMessage( final String addr, final String brokerName, final Me
阅读全文
摘要:路由发现:缓存中的路由信息什么时候更新呢? 由QueueData转topicPublishInfo的List<QueueMessage>: 选择消息队列: sendLatencyFaultEnable=false,默认不启动Broker故障延迟机制, sendLatenFaultEnable=tru
阅读全文
摘要:创建MQClientInstance实例。这里有个实例缓存 clienrId为客户端IP+instance+(unitname)注意到之前把instance替换为进程id,是为了instance为默认值时,同一台物理服务器部署两个应用程序。 MQClientInstance封装了RocketMQ网络
阅读全文
摘要:producer核心属性:生产者所属组,消息服务器在回查事物状态时会随机选择该组中任何一个生产者发起事务回查请求。 createTopicKey:默认topicKey defaultTopicQueueNums:默认主题在每一个Broker队列数量 sendMsgTimeout:发送消息默认超时时间
阅读全文
摘要:同步,异步,单向 Message的扩展属性主要包含下面几个: tag:消息tag,用于消息过滤 keys:Message索引键,用多个空格隔开,可以根据这些key快速检索到消息 waitStoreMsgOK:消息发送时是否等消息存储完成后再返回 delayTimeLevel:消息延迟级别,用于定时消
阅读全文
摘要:RocketMQ路由发现是非实时的,当Topic路由出现变化时,NameServer不主动推动给客户端,而是客户端定时拉取主题最新的路由 总结: topic路由的是brokername
阅读全文
摘要:rt,spring Temp不知道用的什么反序列化,int不能反序列化为Integer,后实验hissing是可以的int->Integer Integer(不为null)->int均可
阅读全文
摘要:IOC容器的初始化完成的主要工作是在IOC容器中建立BeanDefinition数据映射。在此过程中并没有看到IOC容器对Bean依赖关系进行注入。 注意到依赖注入的过程是用户第一次向IOC容器索要Bean时触发的。当然也有例外,也就是我们可以在BeanDefinition信息中通过控制lazy-i
阅读全文