![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RocketMQ
文章平均质量分 94
贝克街的流浪猫
公众号: 贝贝猫技术分享
展开
-
RocketMQ 简介
引言本系列文章详细地介绍了 RocketMQ 的设计思想和实现细节,本文作为开篇,着重介绍了 RocketMQ 的设计思想已经常见使用场景。功能介绍简单来说,消息队列就是基础数据结构课程里“先进先出”的一种数据结构,但是如果要消除单点故障,保证消息传输的可靠性,并且还能应对大流量的冲击,对消息队列的要求就很高了。现在互联网“微架构”模式兴起,原有大型集中式的IT服务因为各种弊端,通常被分拆成细粒度的多个“微服务”,这些微服务可以在一个局域网内,也可能跨机房部署。一方面对服务之间松耦合的要求越来越高,另原创 2021-03-31 08:56:28 · 343 阅读 · 0 评论 -
RocketMQ NameServer
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中 NameServer 部分的实现细节。NameServer本节主要介绍RocketMQ路由管理、服务注册及服务发现的机制,NameServer是整个RocketMQ的“大脑”。相信大家对“服务发现”这个词语并不陌生,分布式服务SOA架构体系中会有服务注册中心,分布式服务SOA的注册中心主要提供服务调用的解析服务,指引服务调用方(消费者)找到“远方”的服务提供者,完成网络通信,那么RocketMQ的路由中心存储的是什么数据呢?原创 2021-03-31 08:56:24 · 227 阅读 · 0 评论 -
RocketMQ 发送消息
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中消息发送部分的实现细节。消息发送RocketMQ支持3种消息发送方式:同步(sync)、异步(async)、单向(oneway)。同步:发送者向MQ执行发送消息API时,同步等待,直到消息服务器返回发送结果。异步:发送者向MQ执行发送消息API时,指定消息发送成功后的回调函数,然后调用消息发送API后,立即返回,消息发送者线程不阻塞,直到运行结束,消息发送成功或失败的回调任务在一个新的线程中执行。单向:消息发送者向MQ原创 2021-03-31 08:56:19 · 276 阅读 · 0 评论 -
RocketMQ 消息存储文件
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中消息存储文件部分。文件详解了解完了文件存储部分使用的核心技术,在让我们回到 RocketMQ 文件组织的讨论中来,接下来我将挨个分析各个核心文件存储的内容和使用方法。Commit文件commitlog 目录的组织方式在前面已经详细介绍过了,该目录下的文件主要存储消息,其特点是每一条消息长度不相同,CommitLog 文件存储的逻辑视图如下图所示,每条消息的前面4个字节存储该条消息的总长度。整个 CommitLog 文件默认原创 2021-03-30 08:41:44 · 297 阅读 · 0 评论 -
RocketMQ 内存映射
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中使用到的内存映射相关内容。内存映射RocketMQ通过使用内存映射文件来提高IO访问性能,无论是CommitLog、 ConsumeQueue还是IndexFile,单个文件都被设计为固定长度,如果一个文件写满以后再创建一个新文件,文件名就为该文件第一条消息对应的全局物理偏移量。例如CommitLog的文件组织方式如下图所示。RocketMQ使用 MappedFile、 MappedFileQueue来封装存储文件。M原创 2021-03-31 08:56:02 · 417 阅读 · 0 评论 -
RocketMQ 消息存储
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中消息存储部分的整体实现思路。消息存储通过前面的知识,我们已经知道了topic是如何分配到Broker的,以及消息发送方是如何决定把消息发送给哪个Broker的,接下来我们看一看Broker介绍到消息后,是怎么存储消息的。RocketMQ主要存储的文件包括CommitLog文件、ConsumeQueue文件、IndexFile文件。RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件,尽最大的能力确保消原创 2021-03-31 08:56:13 · 204 阅读 · 0 评论 -
RocketMQ 消息消费
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中消息消费部分的实现细节。消息消费消息消费以组的模式开展,一个消费组内可以包含多个消费者,每一个消费组可订阅多个主题,消费组之间有集群模式与广播模式两种消费模式。集群模式,主题下的同一条消息只允许被其中一个消费者消费。广播模式,主题下的同一条消息将被集群内的所有消费者消费一次。消息服务器与消费者之间的消息传送也有两种方式:推模式、拉模式。所谓的拉模式,是消费端主动发起拉消息请求,而推模式是消息到达消息服务器后,推送给消息消费者。原创 2021-03-30 08:41:39 · 744 阅读 · 1 评论 -
RocketMQ 消息过滤
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中消息过滤部分的实现细节。FilterServer 过滤器RocketMQ 提供了基于表达式与基于类模式两种过滤模式,前面已经详细介绍了整个消息拉取、基于表达式(TAG)的过滤模式。基于类模式过滤是指在 Broker 端运行 1 个或多个消息过滤服务器(FilterServer), RocketMQ 允许消息消费者自定义消息过滤实现类并将其代码上传到 FilterServer 上,消息消费者向 FilterServer 拉取消息原创 2021-03-30 08:41:33 · 235 阅读 · 0 评论 -
RocketMQ HA机制
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中HA机制部分的实现细节。HA机制为了提高消息消费的高可用性,避免 Broker 发生单点故障引起存储在 Broker 上的消息无法及时消费,RocketMQ 引入了 Broker 主备机制,即消息消费到达主服务器后需要将消息同步到消息从服务器,如果主服务器 Broker 宕机后,消息消费者可以从从服务器拉取消息。工作机制RocketMQ HA 的实现原理如下。主服务器启动,并在特定端口上监听从服务器的连接从服务器主动原创 2021-03-30 08:41:10 · 287 阅读 · 0 评论 -
RocketMQ 事务消息
引言前面我们已经简单地介绍了 RocketMQ 的整体设计思路,本文着重其中事务消息部分的实现细节。事务消息Apache RocketMQ 在4.3.0版中已经支持分布式事务消息,这里 RocketMQ 采用了 2PC 的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息,如下图所示。上图说明了事务消息的大致方案,其中分为两个流程:正常事务消息的发送及提交、事务消息的补偿流程。事务消息发送及提交:发送消息(half 消息)服务端响应消息写入结果根据发送结果执行本原创 2021-03-30 08:41:04 · 176 阅读 · 1 评论 -
RocketMQ 常见问题
引言至此,我们已经介绍完了 RocketMQ 的所有实现细节,最后我们简单地介绍一下使用 RocketMQ 时常见的问题。常见问题顺序消息方案顺序消息是指消息的消费顺序和产生顺序相同,在有些业务逻辑下,必须保证顺序。比如订单的生成、付款、发货,这 3 个消息必须按顺序处理才行。顺序消息分为全局顺序消息和部分顺序消息,全局顺序消息指某个 Topic 下的所有消息都要保证顺序;部分顺序消息只要保证每一组消息被顺序消费即可,比如上面订单消息的例子,只要保证同一个订单 ID 的三个消息能按顺序消费即可。原创 2021-03-30 08:40:58 · 917 阅读 · 1 评论