05 2023 档案
摘要:一、原理 1.1 消息存在哪了? 消息持久化的地方其实是磁盘上,在如下目录里的commitlog文件夹里。 /root/store/commitlog 源码如下: // {@link org.apache.rocketmq.store.config.MessageStoreConfig} // 数据
阅读全文
摘要:一、概述 TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是
阅读全文
摘要:一、概述 负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。 RocketMQ支持三种消息发送方式: 同步消息发送(sync):当Producer发送消息到Broker时会同步等待消息处理结果; 异步消息发送(async):当Produce
阅读全文
摘要:前言 RocketMQ是一个分布式具有高度可扩展性的消息中间件。本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的。 NameServer集群 提供轻量级的服务发现和路由。每个NameServer 记录完整的路由信息,提供等效的读写服务,并支持快速存储扩展。 就是一个注
阅读全文
摘要:前言 首先提出我们的监控诉求,出现如下情况时,希望能够及时接收到系统告警通知: RocketMQ服务宕机 RocketMQ消费者下线 RocketMQ消息出现长时间或者大量堆积 本文将通过修改rocketmq-console源码的方式,增加RocketMQ消费者下线和RocketMQ消息出现长时间或
阅读全文
摘要:一、概述 对于任何一款消息中间件而言,消费者客户端一般有两种方式从消息中间件获取消息并消费: Push方式:由消息中间件(MQ消息服务器代理)主动地将消息推送给消费者;采用Push方式,可以尽可能实时地将消息发送给消费者进行消费。但是,在消费者的处理消息的能力较弱的时候(比如,消费者端的业务系统处理
阅读全文
摘要:一、概述 Apache RocketMQ在4.3.0版中已经支持分布式事务消息,通过消息的异步事务,可以保证本地事务和消息发送同时执行成功或失败,从而保证了数据的最终一致性。 二、案例 根据官方提供的例子,TransactionProducer.java如下: public class Transa
阅读全文
摘要:一、概述 Producer对发送失败的消息进行重新发送的机制,称为消息发送重试机制,也称为消息重投机制。 对于消息重投,需要注意以下几点: 生产者在发送消息时,若采用同步或异步发送方式,发送失败会重试,但oneway消息发送方式发送失败是没有重试机制的; 只有普通消息具有发送重试机制,顺序消息是没有
阅读全文
摘要:一、概述 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 如何启用消息轨迹? broker端 需要在broker端的配置文件中添加配置项:traceTopicEnable=true,注意:对于消息轨迹数据量较大的场景,可以在RocketMQ集群中选择其中一个Broker节点专用于存储消息轨迹,使得
阅读全文
摘要:一、概述 RocketMQ消息队列集群主要包括NameServer、Broker(Master/Slave)、Producer、Consumer4个角色,基本通讯流程如下: Broker启动后需要完成一次将自己注册至NameServer的操作;随后每隔30s时间定时向NameServer上报Topi
阅读全文
摘要:一、概述 消息持久化存储是MQ消息队列中最为复杂和最为重要的一部分,本文先从目前几种比较常用的MQ消息队列存储方式出发,为大家介绍RocketMQ选择磁盘文件存储的原因。然后,本文分别从RocketMQ的消息存储整体架构和RocketMQ文件存储模型层次结构两方面进行深入分析介绍。使得大家读完本文后
阅读全文