![](https://img-blog.csdnimg.cn/20190814140431605.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
RocketMQ的秘密
网上介绍RocketMQ的文章有很多,本系列不是RocketMQ的入门系列。本系列试图从一些零碎的视角、带着问题解读源码。
GAMELOFT9
读万卷书,行万里路,知行合一。
展开
-
RocketMQ Consumer如何获取并维护消费进度?
背景Cosumer消费消息,一般是如下几个步骤:发送获取消息请求,查找消息,消息过滤,负载均衡,消息处理,回发确认。限于篇幅,这篇文章主要介绍Consumer是如何发送获取消息请求的,以及RocketMQ基于长轮询的推模式实现。由于以上几个步骤都是紧密相连的,可能会出现互相穿插。从何处开始消费?...原创 2020-01-21 11:43:49 · 3762 阅读 · 0 评论 -
RocketMQ Consumer如何订阅消息的?
在配置Consumer的时候,通常会有这么一行代码: /** * 订阅指定topic下所有消息<br> * 注意:一个consumer对象可以订阅多个topic */ consumer.subscribe("test_url", "*");这行代码表示该consumer订阅了test_url这个topic下面的所有类型消息。这样之后就可以顺利接收到test_u...原创 2020-01-10 15:52:48 · 6127 阅读 · 0 评论 -
RocketMQ如何构建ComsumerQueue的?
前言RocketMQ的消息都是按照先来后到,顺序的存储在CommitLog中的,而消费者通常只关心某个Topic下的消息。顺序的查找CommitLog肯定是不现实的,我们可以构建一个索引文件,里面存放着某个Topic下面所有消息在CommitLog中的位置,这样消费者获取消息的时候,只需要先查找这个索引文件,然后再去CommitLog中获取消息就 OK了。这个索引文件,就是我们的Comsumer...原创 2020-01-02 12:28:50 · 2739 阅读 · 4 评论 -
Netty在RocketMQ中的应用----编解码
编解码NettyEvent派发连接管理流量控制原创 2019-12-11 09:11:24 · 422 阅读 · 0 评论 -
Netty在RocketMQ中的应用----服务端
RocketMQ中角色有Producer、Comsumer、Broker和NameServer,它们之间的通讯是通过Netty实现的。在之前的文章RocketMQ是如何通讯的?中,对RocketMQt通讯进行了一些介绍,但是底层Netty的细节涉及的比较少,这一篇将作为其中的一个补充。服务端启动 ServerBootstrap childHandler = this.s...原创 2019-11-06 15:52:19 · 493 阅读 · 0 评论 -
Netty在RocketMQ中的应用----客户端
RocketMQ中角色有Producer、Comsumer、Broker和NameServer,它们之间的通讯是通过Netty实现的。在之前的文章RocketMQ是如何通讯的?中,对RocketMQt通讯进行了一些介绍,但是底层Netty的细节涉及的比较少,这一篇将作为一个补充。Netty客户端启动配置Bootstrap handler = this.bootstrap.group(this....原创 2019-11-06 10:41:27 · 998 阅读 · 1 评论 -
RocketMQ是如何通讯的?
前言RocketMQ作为一个分布式消息中间件,通讯肯定是必不可少的。参与通讯的角色包括:NameSrv,Broker,Producer和Consumer,另外Broker Master和Slave结点之间也有通讯。RocketMQ的通讯基于Netty,在其基础上做了一层简单的封装。大致的通讯架构如下所示:理解的这个框架图里的组件,也就理解了通讯的整个过程。通讯载体RemotingComma...原创 2019-08-23 16:51:56 · 1531 阅读 · 0 评论 -
RocketMQ Topic是如何注册和保存的
TopicTopic用于标识一些消息的分类,例如订单消息,通知消息。RocketMQ Producer发送消息,Consumer接收消息,Topic都是绕不过去的话题,消息就是围绕Topic组织的。Topic存储在NameSrv,Producer从NameSrv获取Topic的路由信息,找到broker,然后发送消息至broker。Consumer同样从NameSrv获取Topic路由信息,找到...原创 2019-08-19 11:15:21 · 2821 阅读 · 0 评论 -
RocketMQ发送消息如何选择消息队列?
Producer发送消息的主要流程是验证消息---->查找Topic路由---->选择消息队列—>发送消息。验证消息没什么好说的,很简单。Topic路由的获取和保存、发送消息,之前的文章都有部分涉及,就不再赘述。这里我们对消息队列的选择做一个简单的展开。首先,要澄清一个误会。这里的选择消息队列发送消息,并不是真的往某个队列发送消息。RocketMQ的消息只存在一个叫Commit...原创 2019-09-04 15:40:42 · 3020 阅读 · 1 评论 -
ByteBuffer介绍
为什么会在RocketMQ系列里面参杂一篇ByteBuffer的文章呢?因为RocketMQ存储消息,是存储在文件中的,而且刚好使用的是ByteBuffer。这个属于Java NIO的内容,用到的比较少,如果像我一样没有相关的知识做铺垫,强行看RocketMQ消息存储相关的代码会比较头疼。为了减少学习难度,这里很有必要先介绍一下ByteBuffer相关的知识。...原创 2019-08-30 15:25:39 · 1030 阅读 · 0 评论 -
Producer如何获取Topic路由信息
Producer要发送Message,肯定需要先知道Topic路由信息,这样才能找到提供Topic服务的Broker master结点并发送Message。之前的文章Topic是如何创建和保存的,我们知道了Topic在Broker保存了一份,然后Broker定期向NameSrv注册Broker信息。这样NameSrv就存有所有Topic路由信息。因此Producer要发送消息,肯定需要从NameS...原创 2019-08-27 11:41:48 · 852 阅读 · 1 评论 -
RocketMQ如何维持心跳
首先放上RocketMQ网络结构图,如下所示:Producer与NameSrv随机建立长连接,定期从NameSrv获取topic路由信息。然后Producer还与Broker的Master结点建立长连接,用于发送消息。此外Producer还与Master维持了一个心跳。Conumser与NamseSrv随机建立长连接,定期从NameSrv获取topic路由信息。然后Consumer还与Bro...原创 2019-08-26 19:54:37 · 3797 阅读 · 0 评论 -
RocketMQ消息存储结构简介--CommitLog
RocketMQ消息存储是整个系统的核心,直接决定着吞吐性能和高可用性。RocketMQ存储消息并没有借助oracle、mysql等关系型数据库,而是直接操作文件。借助java NIO的力量,使得I/O性能十分高。当消息来的时候,顺序写入CommitLog。为了Consumer消费消息的时候,能够方便的根据topic查询消息,在CommitLog的基础上衍生出了CosumerQueue文件,存放了...原创 2019-09-09 15:25:33 · 3896 阅读 · 1 评论