RocketMQ
文章平均质量分 81
六道木_
菜鸟一名~~
展开
-
RocketMQ源码分析----消息存储
文件目录相关文件commitlog:消息存储的地方,文件夹下有多个文件,每个文件的大小默认为1G消息的组成:字段名(长度)备注TOTALSIZE(4) MAGICCODE(4) BODYCRC(4) QUEUEID(4)原创 2017-03-02 18:36:33 · 1887 阅读 · 0 评论 -
RocketMQ源码分析----Consumer消费进度相关
在Consumer消费的时候总有几个疑问:消费完成后,这个消费进度存在哪里消费完成后,还没保存消费进度就挂了,会不会导致重复消费Consumer消费进度保存消费完成后,会返回一个ConsumeConcurrentlyStatus.CONSUME_SUCCESS告诉MQ消费成功,以MessageListener的consumeMessage为入口分析。消费的时候,是以ConsumeR...原创 2018-12-28 16:52:38 · 1408 阅读 · 0 评论 -
RocketMQ源码分析----Producer队列选择与容错策略
队列选择在HA的文章里大概讲了一下Producer如何为高可用贡献出一份力量的,当时只是说了遍历列表选择队列,然后选择一个,没有深入分析,这篇文章深入分析一下其源码,首先从发送消息选择队列的代码开始: String lastBrokerName = null == mq ? null : mq.getBrokerName(); MessageQueue tmpmq = this....原创 2018-12-12 01:34:15 · 1228 阅读 · 2 评论 -
RocketMQ源码分析----Producer启动过程
#总体流程首先从demo为入口分析整个启动过程 public static void main(String[] args) throws MQClientException { DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName"); producer.setNamesrvAddr("127.0....原创 2018-12-10 01:26:02 · 440 阅读 · 0 评论 -
RocketMQ源码分析----HA相关(1)
简单介绍RocketMQ搭建集群无非就是搭建Master和Slave,而根据Master和Slave的数量不同又分为几种方式: 1. 单Master无Slave:这种就是普通的单机模式了,Master一挂,消息服务就不可用了 2. 多Master无Slave:这种如果有其中一个Master挂了,集群还能使用,但是由于没有Slave,如果挂的那台Master还有未被消费的消息,那么将会暂时无...原创 2018-05-13 15:20:42 · 537 阅读 · 1 评论 -
RocketMQ源码分析----HA相关(2)
上一篇文章分析了MS之间的同步,Client端在多Matser多Slave下的情况,这一篇文章主要从NameServer的角度来分析,在整个 架构中,NameServer起了非常大的多用,MS,Client和Server之间都是必须依赖NameServer的协调。 另外,在上一篇文章开始的时候,说了3.5.8版本没有主从切换的功能,那么这篇文章也会分析一下,为什么没有这个功能,走起~源码...原创 2018-05-16 23:17:34 · 287 阅读 · 0 评论 -
RocketMQ源码分析----延时消息和重试消息的实现
延时消息的例子和普通消息发送没多大区别,只是多了个句设置延时级别的代码 .... Message msgToBroker = new Message("topic_test", tag, id, body); msgToBroker.setDelayTimeLevel(3); ....level为3那么代表10s后消费者10s后能拉到这条消息,消费者端的代...原创 2018-04-06 16:35:38 · 1925 阅读 · 0 评论 -
RocketMQ源码分析----ConsumeQueue介绍和其构建过程
废话很久没写过看过RocketMQ源码了,就刚开始用MQ的时候,顺便看了下源码,由于当时水平较差,写了几篇文章,现在感觉真JB乱….有种想重新写的冲动( ̄▽ ̄) 所以从这篇文章开始估计会有好些内容是重复的正文了解过RocketMQ的原理或者看过我第一篇RocketMQ文章的应该知道ConsumeQueue是CommitLog的一个索引,查找消息的时候会先去ConsumeQueue获取o...原创 2018-04-06 11:28:02 · 1034 阅读 · 0 评论 -
RocketMQ源码分析----长轮询
废话这篇文章主要讲RocketMQ的长轮询,为什么叫长轮询我也不清楚….主要别人这样叫我也这样叫吧,大家明白意思就好。正文RcocketMQ消费者的模式是pull模式,也就是会定时向Broker请求消息进行消费。在源码中实现是开启了后台线程不停的去pull(当然会先从队列去PullRequest,队列为空会阻塞),刚研究RocketMQ消费者pull的代码之后不久,有个问题:...原创 2018-04-08 00:42:21 · 549 阅读 · 0 评论 -
RocketMQ源码分析----Broker处理消费请求
Consumer启动后会请求broker,broker的PullMessageProcessor的processRequest会对请求进行处理主要步骤1.判断确保订阅组是否存在2.判断订阅组是否可以消费消息3.检查topic是否存在4.检查topic权限5.检查队列有效性6.判断消费者组是否存在7.广播模式下判断是否允许广播方式消费8.判断Subsc原创 2017-04-03 21:00:02 · 1552 阅读 · 0 评论 -
RocketMQ源码分析----Broker处理发送请求
Producer发送消息后,会由SendMessageProcessor类的processRequest方法进行处理,其中会调用sendMesaage方法主要步骤1.创建响应对象Response,用来返回给Producer消息的处理结果2.设置消息相关信息:请求id,消息体,请求队列,topic等3.将信息封装到MessageExtBrokerInner对象中4.消息t原创 2017-04-03 19:51:30 · 901 阅读 · 0 评论 -
RocketMQ源码分析----刷盘的实现
Broker启动的时候,会调用CommitLog的start方法,然后再启动flushCommitLogService线程在CommitLog的构造方法中,会判断刷盘的类型 public CommitLog(final DefaultMessageStore defaultMessageStore) { this.mapedFileQueue = new Ma原创 2017-04-03 16:12:46 · 2612 阅读 · 0 评论 -
RocketMQ源码分析----发送消息
主要步骤发送消息的主要流程总结如下步骤:1.获取Topic信息TopicPublishInfo:tryToFindTopicPublishInfoa) 从缓存map topicPublishInfoTable中获取b) 空则新建c) 更新topic信息:updateTopicRouteInfoFromNameServer原创 2017-03-30 20:02:48 · 2983 阅读 · 0 评论 -
RocketMQ源码分析----消费消息
发送拉取消息请求Consumer在拉取消息的时候,主要分为3个线程,分别做3件事情:1.遍历MessageQueue集合,组装成PullRequest对象,放到map processQueueTable中2.从processQueueTable中获取数据,向broker请求,返回结果放到map responseTable中3.扫描responseTable,根据原创 2017-03-07 11:28:51 · 1665 阅读 · 0 评论 -
RocketMQ源码分析----ProcessQueue
RockerMQ里有个非常重要的数据结构叫ProcessQueue,很多功能,例如消费进度,消费等等功能的底层核心数据保存都是有ProcessQueue提供,下面介绍一下ProcessQueue提供的功能,而整个涉及的流程不会在这展开,在另外的功能分析文章如果涉及才会深入分析看下代码上的注释:Queue consumption snapshot即消息快照的意思,为什么要这样形容呢?主要是...原创 2018-12-18 01:58:56 · 2448 阅读 · 0 评论