Rocket MQ 系列一 - 入门

Rocket MQ 完全入门手册 本手册旨在帮助读者体会Rocket MQ的工作流程,力求能使读者跟着本手册实操一遍之后,获得比单看理论更多的理解。 阅读详情

什么是消息队列

        消息队列(Message Queue),从广义上讲是一种消息队列服务中间件,提供一套完整的信息生产、传递、消费的软件系统,如图所示:

        消息队列锁涵盖的功能远不止与队列,其本质是两个进程传递信息的一种方法。两个进程可以分布在同一台机器上,也可以分布在不同的机器上。

        众所周知,进程通信可以通过RPC(Remote Procedure Call,远程过程调用)进行,那么我们为什么要用消息队列来传递服务呢?

        下面我们以春节订火车票为例进行说明。

        春节准备买车票回家过年,我们会打开12306进行如下操作:

        1)输入车票信息,发送订票请求,输入起点,终点,发车时间等等

        2)单机预定按钮,12306APP开始转圈,与此同时全国可能会有几亿人在进行相同的操作。

        3)3s后,应用告诉你订票失败

        4)你修改车次信息,重新发送订票请求,有过了3s,订票成功。

        下面我们以一张流程图来更直观的体现以上操作:

         12306在处理上面请求逻辑时,会遇到以下挑战:

        (1)今天这个车次只售出4000张票,而实际有30万人发送了订票请求,如果逐一请求处理,那么90%以上的人都将要耗时3s来等待,怎么办?

        (2)下游有20个系统需要在订票成功后进行通知,如果逐一调,用这些系统的接口进行通知,而其中一个通知任务执行失败,那么已经通知成功的任务会怎么样?

        (3)12306APP架构会不断调整,当数据结构发生变化时,下游20个系统都随着一起变化吗?

        以上只是随机列举了一些常见问题,如何才能优雅地处理呢?

        答案是:消息队列!

为什么需要消息队列

削峰填谷

        业务系统在超高并发场景中,由于后端服务来不及同步处理过多,过快的请求,可能导致请求堵塞,严重时可能由于高负荷拖垮Web服务器。

        我们都希望流量像直线一样一直比较平稳,这样我们的系统也会更加稳定,但是实际的流量会随着时间不短变化,像12306这样的APP流量大的难以想象,而一年中不同的时间段,其流量也不同,为了能支持最高峰流量,我们通常才去短平快的方式--直接扩容服务器,增加服务端的吞吐量。

        优点是显而易见的,短时间内吞吐量增加了好几倍,甚至数十倍。缺点也十分明显,流量低峰期服务器相对较闲。

        如何平衡平时的空闲与节假日的超高峰呢?我们想到消息对列(Apache RocketMQ,Apache Kafka),也是目前业界比较常用的手段。利用消息队列扭转处理订票请求,告知用户30min内会告诉他订票结果。优缺点明显:性能提升了,但是我们作为业务开发人员,还要维护一个消息队列服务,人手完全不够。消息中间件呼之欲出。

程序间解耦

        不同的业务端在联合开发功能时,常常由于排期不同、人员调配不方便等原因导致项目延期。其实,根本原因是业务耦合过度。

        加入消息队列后,不同的业务端之间开发,联调,上线彼此完全不依赖,也就是说系统解耦了。

异步处理

        处理订票请求是一个漫长的过程,需要检查预定的车次是否有预定数量的票,下单扣库存,更新缓存等一系列操作。这些耗时的操作,我们可以通过使用消息队列的方式,把提交请求成功的消息告诉用户。然后异步处理这些耗时的操作,保证30min内能把处理的结果通过短信推送给用户,否则系统处理多久,用户就会等多久。

数据的最终一致性

        我们通过银行转账的案例来进行说明:

        如果通信失败,如何保证转账成功呢,常用的手段就是消息队列。消息系统的优点:

        (1)免去了用户A多次重试的复杂逻辑

        (2)免去了用户B处理多次重试请求的压力

        (3)即时用户B的服务不可用,业务也不受影响

常见的消息队列

消息队列名字Apache ActiveMQApache KafkaApache RocketMQApache Pulsar
产生时间2007201220172018
贡献公司ApacheLinkedInalibabayahoo
当时流行MQJMSActiveMQKafka, ActiveMQRocketMQ, Kafka
特性

(1) 支持协议众多:AMQP,STOMP,MQTT,JMS

(2) 消息是持久化的JDBC

(1)超高写入速率

(2)end-to-end 耗时毫秒级

(1)亿万级消息支持

(2)万级TOPIC数量支持

(3)end-to-end耗时毫秒级

(1)存储计算分离

(2)支持SQL数据查询

管理后台自带独立部署独立部署无
多语言客户端支持支持

Java

C++

Python

Go

c#

Java

C++

Python

Go

数据流支持不支持支持支持支持
消息丢失理论上不会丢失理论上不会丢失理论上不会丢失理论上不会丢失
文档完备性好极好极好社区不断完善中
商业公司实践国内部分企业LinkedInalibabayahoo,tencet,zhilian
容错无重试机制无重试机制支持重试,死信消息支持重试,死信消息
顺序消息支持支持支持支持
定时消息不支持不支持支持支持
事务消息不支持支持支持支持
消息轨迹不支持不支持支持自己简单实现
消息查询数据库查询不支持支持支持SQL
重放消息不清楚暂停重放实时重放支持
宕机自动切换自动选主手动重启自动切换

Rocket MQ 集群搭建 集群搭建(三台机器56 57 58) 免密登录(56机器) 搭建(2主2从) 配置第一组broker-a 配置第二组broker-b 启动集群 ① 修改三个节点上的bin/runserver.sh,调整里面的jvm内存配置 ② 直接在三个节点上启动nameServer ③ 启动broker ④ 验证 搭建管理控制台 ① 下载地址:https://github.com/apache/rocketmq-externals ② 进入rocket-console目录,使用maven 阅读详情

相关推荐

深入解析SAP MM模块OBYC自动科目分配机制:从T030表到实战配置

本文深入解析SAP MM模块中OBYC自动科目分配机制,阐明其作为连接物流与财务核心桥梁的作用。文章以T030表为核心,详细拆解其字段结构与检索逻辑,并通过采购收货、生产发料等实战场景,手把手演示配置步骤与关键要点,帮助读者掌握从原理到实践的完整知识体系,实现业财无缝对接。

nft7creator的博客 356

零基础玩转RocketMQ:Java开发者的消息队列入门指南

作为阿里巴巴开源的分布式消息中间件,RocketMQ在双11大促中经受住了万亿级消息考验。本文将带Java开发者从零搭建RocketMQ环境,掌握核心API使用,并完成电商系统实战案例。

m0_61715294的博客 1463

ros1 ubuntu22.04 安装教程

ROS1 ubuntu22.04 安装教程

autolabor的博客 9195

消息队列RocketMQ基础入门

一、MQ简介 1、消息队列需求场景 在基于微服务开发的电商项目中,商品的查询和商品的修改是通过两个服务实现的,如果修改了商品的价格,如何保证商品查询服务查询出来的商品价格同步更新呢? 服务与服务之间的通信方式有两种:同步调用和异步消息调用 同步调用:远程过程调用,REST和RPC 异步消息调用:消息队列 1)、为了保证数据的一致性,当“商户商品修改服务”在完成对A库中商品信息的修改之后,需要调用“商户商品查询服务”及“自媒体商品查询服务”同步完成B库及C库中商品信息的修改; 2)、如果“商户商品修改服

java编程学习_java基础教程_booyzhang的博客 1202

具身智能与空天具身智能:从理论到实践的跨领域融合

本文深入探讨了具身智能从理论到实践的发展,重点分析了空天具身智能这一前沿领域。文章阐述了如何为AI赋予“身体”,使其通过与环境实时交互进化智能,并详细拆解了构建空天智能体所需的核心技术模块,包括多模态感知、基于大模型的决策规划以及鲁棒控制。同时,结合山区电力线自主巡检等实战案例,展望了多智能体协同与标准化等未来方向。

weixin_29045585的博客 532

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 386

RocketMQ详解+部署+案例

Github 上关于 RocketMQ 的介绍: RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具有以下特性: 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型 在一个队列中可靠的先进先出(FIFO)和严格的顺序传递 支持拉(pull)和推(push)两种消息模式 单一队列百万消息的堆积能力 支持多种消息协议,如 JMS、MQTT 等 分布式高可用的部...

Felix_阳的博客 2263

R 绘制环形树状图

按大类小类的从属关系绘制环形图,并把不同值的节点设置为相应大小。要求同一类的节点应为同一颜色。 按照输入,处理代码和输出记录

weixin_43718786的博客 1872

rocketmq入门

RocketMQ简介 1.RocketMQ是一款分布式、队列模型的消息中间件,是阿里巴巴集团自主研发的专业消息中间件,借鉴参考了JMS规范的MQ实现,更参考了优秀的开源消息中间件KAFKA,实现了业务消峰、分布式事务的优秀框架。 2.其底层代码编写清晰优秀,采用Netty NIO框架进行数据通信 3.摒弃了Zookeeper,内部使用更轻量级的NameServer进行网络路由,提高服务性能,并且支...

小生的博客 400

恒玄BES调试笔记-BES2500如何Dump Anc Audio数据

从YP的4M flash改HP3的2M flash只需要改: 原工程:target.mk的export FLASH_SIZE ?= 0x200000和common.mk里的KBUILD_CPPFLAGS += -DNEW_IMAGE_FLASH_OFFSET=0x100000 OTA工程:target.mk的NEW_IMAGE_FLASH_OFFSET ?= 0x100000和FLASH_SIZE ?= 0x200000 ...

leezs的博客 1672

UCIE Specification详解(十一)

Electrical Layer (2D and 2.5D)以及UCIe-3D

Crazzy_M的博客 1193

RocketMQ入坑之路(一)入门

什么是消息队列 MQ? 这里摘抄阿里云RocketMQ的一段话,详情请看阿里云官方文档,写的非常不错,这里附上链接:https://www.alibabacloud.com/help/zh/doc-detail/29532.htm?spm=a2c63.p38356.b99.2.38567c62R1BFHD 消息队列 RocketMQ 是阿里巴巴集团自主研发的专业消息中间件,基于高可用分布式集...

java_Linmingxing的博客 3063

【OpenFOAM】-olaFlow-算例10-wavemakerTank

采用 Flap和Piston两种方式的动网格进行造波

ou_no的博客 2167

Rocket MQ 从入门到实践

生产者将消息推送到队列之后,如果有消费者去消费这个主题上的消息,在队列上记录下不同消费者互不干扰不同的消费位置,它就可享有同一份消息。生产者将消息发送给Exchange交换机,交换机路由到不同的队列,不同的消费者针对不同的队列进行消费,实现简单、但是消息存储冗余。是否一致:如果消息的量级规模存在巨大差异,或者说消息的链路重要程度存在差异,则应该使用不同的主题进行隔离拆分。是否一致:不同类型的消息,如顺序消息和普通消息需要使用不同的主题进行拆分,无法通过tag标签进行分类。即不丢消息,但也有少量重复。

hukehukehukehuke的博客 1045

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring boot 3.x 整合 Rocket MQ 遇到的那些事

spring boot 3 整合 Rocket MQ 遇到的那些事

HongSH945的博客 1717

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Rocket MQ 详解

开这个专栏主要之前实习的时候经常用到Rocket MQ,大厂使用的也比较多,主要讲解一些关键原理和概念。 介绍 定义:分布式消息中间件。MQ是消息队列的意思。 特点:低延迟、高并发、高可用、高可靠。 解释一下“高可用”:通常是指,通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务,我们说系统的可用性是100%。 如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。 核心概念 Topic:消息主题,我理解为与特定主题任务相关的一类消息。 生产者:生产消息.

strive for the best 的博客 1983

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Rocket MQ

Broker 在收到消息后,通过 MessageStore 将消息存储到 commitLog 中,但是 consumer 在消费消息的时候是按照 topic+queue 的维度来拉取消息的。Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的Broker Name,不同的Broker Id来定义,BrokerId为0表示Master,非0表示Slave。

2401_84881237的博客 1309

20、Rocket MQ集群⾼级特性

⼆、主从节点切换的⾼可⽤集群⼀。

srrsheng的博客 1211

启动rocketmq_Linux下搭建Rocket MQ服务

本文介绍如何在Linux环境下搭建Rocket MQ服务,内容包含安装需要的环境,安装步骤,启动服务,模拟消息发送和接收,停止服务以及在安装过程中遇到的问题。还是老规矩,先跟着操作,操作完之后就基本都会了,如果还有疑问,请在留言区评论,我会及时回复ps:文中插入了命令,某些地方排版看起来会比较乱,但是操作还是很方便的依赖的环境Rocket MQ安装需要依赖JDK1.8和maven使用java -v...

weixin_31417135的博客 962

17、Rocket MQ快速实战以及核⼼概念详解

Rocket MQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的—个顶级项目。早期阿里使用ActiveMQ ,但是,当消息开始逐渐增多后,ActiveMQ的IO性能很快达到了瓶颈。于是, 阿⾥开始关注Kafka。但是Kafka是针对日志收集场景设计的,他的高级功能并不是很贴合阿里的业务场景。

srrsheng的博客 1012

互联网公司都喜欢的消息队列,阿里Rocket MQ详细介绍

RocketMQ是⼀款阿⾥巴巴开源的消息中间件,在2017年9⽉份成为Apache的顶级项⽬,是国内⾸个互联⽹中间件在 Apache 上的顶级项⽬。

java_beautiful的博客 1092

Rocket MQ : 拒绝神化零拷贝

内存加持,充分发挥硬件能力文件预热,将中断响应提前到初始化阶段mlock禁止Linux交换内存madvise向操作系统提出内存空间的操作建议或者指示优秀的文件系统设计,尽最大可能保证顺序写将磁盘上的物理文件直接映射到用户态的内存地址中(这种Mmap的方式减少了传统IO将磁盘文件数据在操作系统内核地址空间的缓冲区和用户应用程序地址空间的缓冲区之间来回进行拷贝的性能开销)

mxt51220的博客 559

18、Rocket MQ核⼼编程模型

这—章节,我们就来看下,在这两张图的基础上,如何编写合适的客户端代码,让我们在项⽬中⽤好。⽣产者要发送的消息⽐较多时,可以将多条消息合并成—个批量消息,—次性发送出去。因此,如果要重新发送消息,最好要带上唯—的系统标识,这样在消费者端,才能⾃⾏做幂等判断。⽽消息安全有两⽅⾯的要求,和⽤户⾃定义的属性,都是随着消息—起传递的,所以,消费者端是可以拿到消息的。的作⽤是可以在服务重启时,按照上—次消费的进度,处理后⾯没有消费过的消息。的机制,我们就可以在消息⽣产者发送完消息后,对发送失败的消息进⾏补救。

srrsheng的博客 1034

Rocket MQ 学习

RocketMQ学习笔记 rocketmq 是一款分布式,队列模型的开源消息件 。 一、RocketMQ 的特性 原生分布式 俩种消息拉取 严格消息顺序 特有的分布式协调器 亿级消息堆积 组(group) RocketMQ的基本概念 Producer : 消息生产者,负责产生消息,一般由业务系统负责产生消息。 ​ Consumer:消息消费者,负责消费消息,一般是后台异步系统负责异步消费。 ​ Push Consumer:封装消息拉取,消费进程和内部 *

勿忘初心的博客 1189

Rocket MQ「2」架构

一 名词解释 Message:消息,Rocket MQ中传递信息的载体; Producer:生产者,即消息的发布者,负责生产并发送消息; Producer Instance:生产者实例,表示一个生产者具体对象; Producer Group: 生产者组,即生产者集群,由一个或多个相同生产者实例组成; Customer:消费者,也称为订阅者,负责接收被消费消息; Customer Instance:消费者实例,表示一个消费者的具体对象; Customer Group:消费者组,即消费者集群,由

说淑人的所思所想 312
上一篇: ConcurrentHashMap1.7的实现原理与使用
下一篇: Rocket MQ系列二 - 生产者原理
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值