月归档:2015年06月

RocketMQ学习(六):消息的生命周期上之消息的产生

源代码版本是3.2.6。消息的生命周期包括2部分,消息的产生和消息的消费,这篇先说下前者。消息的产生详细一点可以分为: a.消息产生后由Producer发送至Broker。 b.Broker接收到消息做持久化。 调试代码得到这样的过程, 1.DefaultMQProducer.send()发出消息。 2.DefaultMQProducerImpl.sendDefaultImpl()发出消息。 3.DefaultMQProducerImpl.tryToFindTopicPublishInfo(),即向Namesrv发出GET_ROUTEINTO_BY_TOPIC的请求,来更新 MQProducerInner的topicPublishInfoTable和MQConsumerInner的topicSubscribeInfoTable。 4.调用topicPublishInfo.selectOneMessageQueue(),从发布的topic中轮询取出一个MessageQueue。默认一个topic对应4个MessageQueue。

发表在 编程语言 | 标签为 , | Comments Off on RocketMQ学习(六):消息的生命周期上之消息的产生

RocketMQ学习(五):Pull和Push

源代码版本是3.2.6。在rocketmq里,consumer被分为2类:MQPullConsumer和MQPushConsumer,其实本质都是拉模式(pull),即consumer轮询从broker拉取消息。 区别是: push方式里,consumer把轮询过程封装了,并注册MessageListener监听器,取到消息后,唤醒MessageListener的consumeMessage()来消费,对用户而言,感觉消息是被推送过来的。 pull方式里,取消息的过程需要用户自己写,首先通过打算消费的Topic拿到MessageQueue的集合,遍历MessageQueue集合,然后针对每个MessageQueue批量取消息,一次取完后,记录该队列下一次要取的开始offset,直到取完了,再换另一个MessageQueue。

发表在 编程语言 | 标签为 , | Comments Off on RocketMQ学习(五):Pull和Push