rocketmq源码分析及注意事项
文章平均质量分 93
MQCloud
https://github.com/sohutv/mqcloud
展开
-
一条消息的一生
一、 消息的诞生消息,可以理解为异构系统数据交流的载体。它可以简单到只是一个单词:“Hello”,或是复杂的对象。每个生命的诞生都是一场考验,消息也不例外(这里的诞生是指消息成功发送并安全存储的过程)。准备工作 - 序列化由于RocketMQ是分布式的,其消息存储组件-broker承担着核心的存储工作。也就是说消息需要跨网络传输,才能到达broker。那么这就涉及到序列化工作了,何谓序列化?序列化就是把对象转化为字节数组的过程。为什么需要转换成字节数组呢?因为计算机存储和网络传输都只认字原创 2021-04-14 09:12:06 · 465 阅读 · 0 评论 -
RocketMQ新的订阅组CONSUME_FROM_LAST_OFFSET为啥无效?
一、背景之前遇到一个问题,就是一个新的订阅组,指定集群方式消费,使用DefaultMQPushConsumer,第一次启动指定的consumeFromWhere是CONSUME_FROM_LAST_OFFSET,但是却消费了好久之前的消息!!!CONSUME_FROM_LAST_OFFSET官方的解释是一个新的订阅组第一次启动从队列的最后位置开始消费,后续再启动接着上次消费的进度开始消费,但某...原创 2018-10-31 15:59:27 · 8993 阅读 · 6 评论 -
rocketmq问题汇总-instanceName参数何时该设置?
以下只针对集群模式:1 producer默认情况下不需要设置instanceName,rocketmq会使用ip@pid(pid代表jvm名字)作为唯一标示如果同一个jvm中,不同的producer需要往不同的rocketmq集群发送消息,需要设置不同的instanceName原因如下:如果不设置instanceName,那么会使用ip@pid作为producer唯一标识,原创 2016-02-14 17:31:14 · 18254 阅读 · 3 评论 -
rocketmq问题汇总-如何将特定消息发送至特定queue,消费者从特定queue消费
业务描述 由于业务需要这样一种场景,将消息按照id(业务id)尾号发送到对应的queue中,并启动10个消费者(单jvm,10个消费者组),从对应的queue中集群消费,如下图1所示(假设有两个broker组成的集群): producer如何实现 producer只需发送消息时调用如下方法即可 /** * 发送有序消息 * * @param messageMap 消息数原创 2016-04-20 11:56:05 · 17018 阅读 · 1 评论 -
rocketmq3.26研究之五DefaultMQPushConsumer
占个坑原创 2016-02-19 20:48:34 · 14907 阅读 · 2 评论 -
rocketmq3.26研究之一存储层
MapedFile 对MappedByteBuffer的封装,具有创建文件(使用非堆区内存), 写入,提交,读取,释放,关闭等功能 关键字段解释: 1 fileFromOffset 单看这个字段很难明白什么意思,如果联系上MapedFileQueue来看的话,就能明白了,该字段代表了这个文件在queue中的偏移量,比如0,表示queue中的第一个文件,1024表示queue原创 2016-02-15 11:26:07 · 5766 阅读 · 0 评论 -
rocketmq3.26研究之六DefaultMQPushConsumer消费流程
1 假设关系图如下:图12 启动流程如下:3 一切美好的事情都从PullMessageService的run方法开始了: 3.1 run方法会不断的从LinkedBlockingQueue中获取PullRequest对象,然后根据PullRequest进行消息拉取。 问题1:是谁把PullRequest放到LinkedBlockingQu原创 2016-02-14 17:46:30 · 6668 阅读 · 0 评论 -
rocketmq3.26研究之二broker
占个坑原创 2016-02-19 20:45:36 · 4128 阅读 · 0 评论 -
rocketmq3.26研究之四DefaultMQProducer
DefaultMQProducer 作为rocketmq生产者的默认实现,其实它并没有做任何实现,其内部引用一个DefaultMQProducerImpl实例进行具体消息发送。 它有一些基础配置,比如多长时间内消息发送多少次还是没成功则放弃(默认为4秒内发送3次,每次发消息默认超时间为3秒),可以参考DefaultMQProducerImpl.sendDefaultImpl原创 2016-02-18 18:38:59 · 11927 阅读 · 4 评论 -
rocketmq3.26研究之三NameServer
1. NamesrvStartup>该类主要用于读取配置文件,初始化并启动NamesrvController。2. NamesrvController>该类两个重要功能:>1 接受broker的注册,并返回master地址和ha地址,这样slave注册时就能知道master以及数据同步地址。原创 2016-02-15 17:26:34 · 2362 阅读 · 0 评论 -
rocketmq3.26研究之Failover下consumer的表现
1 环境如下:2 消费流程参照DefaultMQPushConsumer消费流程3 failover表现:3.1 消息拉取异常:2015-08-12 11:47:13,215 [PullMessageService] ERROR RocketmqClient - pullKernelImpl exceptioncom.alibaba.rocket原创 2016-02-14 17:37:03 · 3959 阅读 · 0 评论 -
rocketmq3.26研究之Failover下producer的表现
1 环境如下:说明:producer默认会依次轮询 broker_a-q0,broker_a-q1,broker_a-q2,broker_a-q3,broker_b-q0,broker_b--q1,broker_b-q2,broker_b-q3 进行消息发送。这个对应关系列表暂时称作 topic路由,下面会用到该词语。2 消息发送流程:每次发送原创 2016-02-14 17:35:35 · 1393 阅读 · 0 评论 -
rocketmq问题汇总-一个consumerGroup只对应一个topic
1 同一个订阅组内不同Consumer实例订阅不同topic消费混乱问题调查图1:背景说明:如图1左半部分,假设目前的关系如下:broker: 两个,broker_a和broker_btopic:两个,topic1和topic2,每个topic在每个broker上分为4个queueconsumer:两个,consumer1和consumer2原创 2016-02-14 17:32:19 · 95683 阅读 · 26 评论 -
rocketmq问题汇总-broker配置brokerIp2何时该配置?
HA说brokerIp2之前需要先说一下rocketmq的高可用功能,rocketmq的broker负责存储消息,提供读写功能,一旦挂掉将无法提供服务。为了保证高可用,每个broker可以部署为一个master对应一个或多个slave功能,当master挂掉时,consumer从slave拉取数据进行读取。HA地址HAServerAddress说明:slave从master拉取原创 2016-02-14 17:38:11 · 6906 阅读 · 1 评论