rocketmq入门到精通—rocketmq学习入门指南|精讲rocketmq是什么

author author     2022-12-05     649

关键词:

名言警句


阅读使人充实,会谈使人敏捷,写作使人精确。——培根

追本溯源

​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​

前提概要


RocketMQ是一个统一消息引擎、轻量级数据处理平台。RocketMQ是一款阿里巴巴开源的消息中间件。 2016 年 11 月 28 日,阿里巴巴向 广西党性培训 Apache 软件基金会捐赠RocketMQ,成为 Apache 孵化项目。 2017 年 9 月 25 日,Apache 宣布 RocketMQ孵化成为 Apache 顶级项目(TLP ),成为国内首个互联网中间件在 Apache 上的顶级项目。

【RocketMQ入门到精通】—


文章宗旨

本系列文章主要针对于RocketMQ的多个关键特性的实现原理进行深入介绍,并对消息中间件遇到的各种问题进行总结,阐述 RocketMQ如何解决这些问题。


消息中间件(MQ)的最基础的协议常见协议

一般情况下MQ的实现是要遵循一些常规性协议的。常见的协议如下:

JMS

JMS,Java Messaging Service(Java消息服务)。是Java平台上有关MOM(Message OrientedMiddleware,面向消息的中间件 PO/OO/AO)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口,简化企业应用的开发。ActiveMQ是该协议的典型实现。

STOMP

STOMP,Streaming Text Orientated Message Protocol(面向流文本的消息协议),是一种MOM设计的简单文本协议。STOMP提供一个可互操作的连接格式,允许客户端与任意STOMP消息代理(Broker)进行交互。ActiveMQ是该协议的典型实现,RabbitMQ通过插件可以支持该协议。

AMQP

AMQP,Advanced Message Queuing Protocol(高级消息队列协议),一个提供统一消息服务的应用层标准,是应用层协议的一个开放标准,是一种MOM设计。基于此协议的客户端与​​消息中间件​​可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。 RabbitMQ是该协议的典型实现。

MQTT

MQTT,Message Queuing Telemetry Transport(消息队列遥测传输),是IBM开发的一个即时通讯协议,是一种二进制协议,主要用于服务器和低功耗IoT(物联网)设备间的通信。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器的通信协议。 RabbitMQ通过插件可以支持该协议。

CORBA Notification

不太理解,没怎么研究过


RocketMQ的设计优势

上面的基本协议为设计MQ系统指明了方向,但是仍有不少问题规范没有提及,对于消息中间件又至关重要。RocketMQ 并不遵循任何规范,但是参考了各种规范与同类产品的设计思想,可所谓“去其糟粕,取其精华”。


RocketMQ的最初用途

在阿里孕育 RocketMQ 的雏形时期,我们将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着我们的贸易业务吞吐量的上升,源自我们的消息传递集群的压力也变得紧迫。

根据我们的研究,随着队列和虚拟主题使用的增加,ActiveMQ IO模块达到了一个瓶颈。我们尽力通过节流、断路器或降级来解决这个问题,但效果并不理想。于是我们尝试了流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,其尤其表现在低延迟和高可靠性方面,详见这里。在这种情况下,我们决定发明一个新的消息传递引擎来处理更广泛的消息用例,覆盖从传统的pub/sub场景到高容量的实时零误差的交易系统。

       Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。


RocketMQ产品发展历史

最原始的发展阶段主要过度了五个主要版本

1.0版本Metaq(Metamorphosis)

由开源社区 killme2008 维护,开源社区非常活跃。项目仓库地址:​​https://github.com/killme2008/Metamorphosis ​

2.0版本Metaq

由2012 年 10 月份上线,在淘宝内部被广泛使用。

3.0版本RocketMQ

​基于公司内部开源共建原则, RocketMQ项目只维护核心功能,且去除了所有其他运行时依赖,核心功能最简化。每个 BU 的个性化需求都在 RocketMQ 项目之上进行深度定制。RocketMQ 向其他 BU 提供的仅仅是 Jar 包,例如要定制一个 Broker,那么只需要依赖 rocketmq-broker 这个 jar 包即可,可通过 API 进行交互, 如果定制 client,则依赖 rocketmq-client 这个 jar 包,对其提供的 api 进行再封装。 开源社区地址:​ ​https://github.com/alibaba/RocketMQ

4.0版本RocketMQ

目前用的最多的,我用的主要是4.3、4.5、4.9.2这几个版本。

5.0版本RocketMQ

最新版本,还在尝试学习中。

RocketMQ的基本属性

Producer

消息生产者,负责产生消息,一般由业务系统负责产生消息。

Consumer

消息消费者,负责消费消息,一般是后台系统负责异步消费。

Push Consumer

刻回调 Listener 接口方法。

Pull Consumer

Consumer 的一种,应用通常主动调用 Consumer 的拉消息方法从 Broker 拉消息,主动权由应用控制。

Producer Group

一类 Producer 的集合名称,这类 Producer 通常发送一类消息,且发送逻辑一致。

Consumer Group

      一类 Consumer 的集合名称,这类 Consumer 通常消费一类消息,且消费逻辑一致。

Broker

     消息中转角色,负责存储消息,转发消息,一般也称为 Server。在 JMS 规范中称为 Provider。


广播消费

      一条消息被多个 Consumer 消费,即使这些 Consumer 属于同一个Consumer Group,消息也会被 Consumer  Group 中的每个 Consumer 都消费一次,广播消费中的 Consumer Group 概念可以认为在消息划分方面无意 义。

集群消费

一个Consumer Group 中的 Consumer 实例平均分摊消费消息。例如某个 Topic 有 9 条消息,其中一个 Consumer Group 有 3 个实例(可能是 3 个进程,或者 3 台机器),那么每个实例只消费其中的 3 条消息。

  • 在 CORBA Notification 规范中,无此消费方式。
  • 在 JMS 规范中,JMS point-to-point model 与之类似,但是 RocketMQ 的集群消费功能大等于 PTP 模型。 因为 RocketMQ 单个 Consumer Group 内的消费者类似于 PTP,但是一个 Topic/Queue 可以被多个 Consumer Group 消费。​

顺序消息

消费消息的顺序要同发送消息的顺序一致,在 RocketMQ 中,主要指的是局部顺序,即一类消息为满足顺序性,必须 Producer单线程顺序发送,且发送到同一个队列,这样 Consumer 就可以按照 Producer 发送 的顺序去消费消息。

普通顺序消息

顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker 重启,由于队列 总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。 如果业务能容忍在集群异常情况(如某个 Broker 宕机或者重启)下,消息短暂的乱序,使用普通顺序方式比较合适。

严格顺序消息

顺序消息的一种,无论正常异常情况都能保证顺序,但是牺牲了分布式 Failover 特性,即 Broker 集群中只 要有一台机器不可用,则整个集群都不可用,服务可用性大大降低。 如果服务器部署为同步双写模式,此缺陷可通过备机自动切换为主避免,不过仍然会存在几分钟的服务不可用。(依赖同步双写,主备自动切换,自动切换功能目前还未实现)

目前已知的应用只有数据库 binlog 同步强依赖严格顺序消息,其他应用绝大部分都可以容忍短暂乱序,推 荐使用普通的顺序消息。

Message Queue

在RocketMQ 中,所有消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的每个存储单元都是定长,访问其中的存储单元使用 Offset 来访问,offset 为 java long 类型,64 位,理论上在 100 年内不会溢出,所以认为是长度无限,另外队列中只保存最近几天的数据,之前的数据会按照过期时间来删除。 也可以认为 Message Queue 是一个长度无限的数组,offset 就是下标。

rocketmq入门到精通—rocketmq中级特性能力|解释一下顺序消息原理

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】什么是消息的顺序性消息的顺序性指的是在消息消费时,能按照发送的顺序来消费。例如:针对于商城服务的的下单到付款的流程中,会产生三条... 查看详情

rocketmq入门到精通—rocketmq初级特性能力|messageorder,rocketmq的消息可以是有序的哦

...源​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​订阅与发布消息的发布是指某个生产者向某个topic发送消息,消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据... 查看详情

rocketmq入门到精通—rocketmq初级特性能力|messagereliablity,消息可靠性(不能多也不能丢)如何解决?

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】RocketMQ支持消息的高可靠,影响消息可靠性的几种情况:Broker非正常关闭Broker异常CrashOSCrash机器掉电,但是能立即恢复供电情况机器无法开机(可... 查看详情

rocketmq入门到精通—rocketmq初级特性能力|messagefilter消息过滤,可不是web容器的过滤器哦

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】什么是消息过滤MessageFilter,可不是web容器的过滤器哦,可以发生在服务端也可以发生在客户端,消息过滤是指消息生产者向Topic中发送消息时,设... 查看详情

(作者推荐)rocketmq入门到精通—rocketmq中级特性能力|​长轮询pull和push模式你选择哪个?为什么?区别在哪里?(含源码分析)「push篇」

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】RocketMQ消费机制回顾   在众多MQ的体系中,一般消息的流转过程为消息通过生产者发送到某一个主题(topic),对应的订阅该topic的消费... 查看详情

rocketmq入门到精通—rocketmq初级特性能力|messagepersistence,消息中间件通常采用的几种持久化方式,可以存到数据库里面甚至redis里,你知道不?

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】MessagePersistence,消息中间件通常采用的几种持久化方式,可以存到数据库里面甚至redis里,你知道不?RocketMQ的存储和消费关系RocketMQ是一个队列模... 查看详情

springboot整合rocketmq实现入门案例

此前我们学习了如何在linux安装RocketMQ,以及使用Java程序公网连接的一系列准备工作,并且学习了Spring整合RocketMQ的第一个案例!现在我们来学习SpringBoot如何整合RocketMQ实现更加简单的使用!文章目录1创建maven项目... 查看详情

rocketmq-学习

官网:http://rocketmq.apache.org/入门:http://rocketmq.apache.org/docs/quick-start/gtihub:https://github.com/apache/rocketmq中文文档:https://github.com/apache/rocketmq/tree/master/do 查看详情

八.rocketmq极简入门-在springboot中使用rocketmq(代码片段)

...不得不考虑和SpringBoot集成,本篇文章为SpirngBoot整合RocketMQ案例SpringBoot集成RocketMQ导入依赖这里使用整合RocketMQ的基础依赖:rocketmq-spring-b 查看详情

rocketmq事务消息入门介绍(代码片段)

说明周五的时候发了篇:Rocketmq4.3支持事务啦!!!,趁着周末的时候把相关内容看了下,下面的主要内容就是关于RocketMQ事务相关内容介绍了。说明:今天这篇仅仅是入门介绍,并没有涉及到很多细节,先把大概流程说明白,... 查看详情

rocketmq存储优化技术解析——图解源码级解析(代码片段)

...#x1f34a;Java学习:Java从入门到精通总结🍊深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想🍊绝对不一样的职场干货:大厂最佳实践经验指南📆最近更新:2023年1月13日🍊个人简介:通信工程... 查看详情

rocketmq源码学习-1.入门

为什么读RocketMQ消息队列在互联网应用中使用较为广泛,学习她可以让我门更加了解使用技术的工作原理透过学习她的源码,拓宽认知RocketMQ经历了阿里双十一有哪些名词Producer消息生产者,负责产生消息Consumer消息消费者,负责... 查看详情

rocketmq入门到入土事务消息&顺序消息(代码片段)

接上一篇:RocketMQ入门到入土(一)新手也能看懂的原理和实战!一、事务消息的由来1、案例引用官方的购物案例:小明购买一个100元的东西,账户扣款100元的同时需要保证在下游的积分系统给小明这个账号增加100积分。账号系... 查看详情

rocketmq快速入门

前面几篇文章介绍了为什么选择RocketMQ,以及与kafka的一些对比:阿里RocketMQ优势对比,方便大家对于RocketMQ有一个简单的整体了解,之后介绍了:MQ应用场景,让我们知道MQ在什么时候可以使用,可以解决什么问题,之后介绍了:... 查看详情

七.rocketmq极简入门-rocketmq事务消息(代码片段)

概述如果业务只涉及到一个数据库的写操作,我们只需要保证这一个事物的提交和回滚,这种事务管理叫传统事物或本地事务,如果业务涉及到多个数据库(多个服务)的写操作,我们需要保证多个数据库同时提交... 查看详情

四.rocketmq极简入门-rocketmq顺序消息发送(代码片段)

...消费,队列本身是一种先进先出的数据结构,而RocketMQ理论上说也遵循这种机制。但是默认生产者以RoundRobin轮询方式把消息发送到不同的Queu 查看详情

rocketmq原理学习--索引

 1、RocketMQ原理学习--RocketMQ源码运行 2、RocketMQ原理学习--RocketMQ整体架构窥探 3、RocketMQ原理学习--消息类型 4、RocketMQ原理学习--NameServer 5、RocketMQ原理学习---生产者普通消息发送 6、RocketMQ原理学习---生产者... 查看详情

rocketmq源码学习笔记(代码片段)

一、环境配置1.1、下载源码下载地址:https://github.com/apache/rocketmqgitclonehttps://github.com/apache/rocketmq.git1.2、导入maven工程到IDE1.3、准备启动的配置1)在下载的rocketmq根目录创建新文件夹conf2)把rocketmq\\distribution 查看详情