【RocketMQ】MQ与RocketMQ介绍

🎯 导读:本文介绍了消息队列(MQ)的基本概念及其在分布式系统中的作用,包括实现异步通信、削峰限流和应用解耦等方面的优势,并对ActiveMQ、RabbitMQ、RocketMQ及Kafka四种MQ产品进行了对比分析,涵盖了它们的开发语言、吞吐量、时效性和可用性等特点。此外,文章还特别介绍了RocketMQ,包括其架构设计、高可用性实现方式以及消费模式等内容,突出了RocketMQ在消息顺序消费、拉取模式、扩展性等方面的优势。

文章目录

  • MQ简介
    • MQ定义
    • MQ作用
      • `作用一:异步`
      • `作用二:削峰限流`
      • `作用三:解耦`
    • 为什么要使用MQ
    • MQ使用流程
      • 实际业务
  • 不同 MQ 产品对比
  • RocketMQ简介
    • 相关重要概念
    • RocketMQ为何高可用
    • Broker内部结构
    • 生产和消费理解
    • 消费模式

MQ简介

MQ即Message Queue

  • Message消息:消息可以是一句话、一个短信、一份邮件、一份业务数据
  • Queue队列:用来存放消息
  • 生产者将消息发送到队列中,消费者到队列中获取消息进行消费

MQ定义

  • MQ是一个消息中间件(如缓存中间件有redis、memcache;数据库中间件有mycat、canal)
  • 利用高效可靠的消息传递机制进行与平台无关(跨平台)的数据交流,并基于数据通信来进行分布式系统的集成。
  • 通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储,流量削峰,异步通信,数据同步等

MQ作用

为什么要用消息队列来存储消息,生产者为什么不直接发给消费者?

作用一:异步

生产者发给消费者,消费者在忙其他事,当前没时间处理,咋办?生产者等着吗,显然不合理。使用异步的方式,生产者发完消息之后,就去做自己的事情,后续消费者有空再去队列中获取数据来执行业务即可;

案例:假如系统 A 希望发送一个消息给系统 B 去处理,但系统 A 不关注系统 B 到底怎么处理或者有没有处理完,系统 A 把消息发送给 MQ ,就不管这条消息的死活了,接着系统 B 从MQ里面消费出来处理即可。至于怎么处理,是否处理完毕,什么时候处理,都是系统 B 的事,与系统 A 无关。

在这里插入图片描述

这样的一种通信方式,就是所谓的“异步”通信方式,对于系统A来说,只要把消息发给MQ,然后系统B就会异步处去进行处理了,系统A不需要“同步”的等待系统B处理完。这样的好处是什么呢?解耦

作用二:削峰限流

消费者的业务执行能力是有限的,例如一个业务执行需要花费3秒。假如大量请求同时过来,tomcat线程池的线程被占用完了,后续的请求会报错(503服务不可用)。如果请求过来之后,直接放到消息队列就返回,这样就可以大大降低服务不可用的概率,后续消费者再去消息队列里面慢慢获取业务信息去执行即可;

作用三:解耦

取消应用之间、模块之间的强耦合关系,让程序更加健壮、高可用。如果模块都直接耦合在一块,一个模块出问题,很容易影响到其他模块。通过使用A模块->消息队列->B模块模式将A、B模块解耦

【应用系统解耦的好处】

  • 发送者和接收者不必了解对方,只需要确认消息
  • 发送者和接收者不必同时在线

为什么要使用MQ

1、做系统解耦,当新的模块进来时,可以做到代码改动最小; 解耦

2、让后端系统按自身吞吐能力进行消费,不被瞬时流量冲垮; 削峰限流

3、通过强弱依赖梳理,把非关键调用链路的操作异步化,提升整体系统的吞吐能力; 异步处理

MQ使用流程

  • 发送者把消息发给消息服务器,消息服务器把消息存放在若干队列/主题中,在合适的时候,消息服务器会把消息转发给接收者。在这个过程中,发送和接受是异步的,发送无需等待,发送者和接受者的生命周期没有必然关系。
  • 在发布pub/订阅sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者(例如微信订阅号)

在这里插入图片描述

实际业务

在这里插入图片描述

不同 MQ 产品对比

MQ主要关注两个性能:

  • 吞吐量:单位时间内可以处理多少条消息(用消息大小来描述更准确,因为消息内存越小,数量会越大)
  • 时效性:生产者发消息,MQ多久才收到消息

【对比】

特性ActiveMQRabbitMQRocket MQkafka
开发语言javaerlangjavascala
单机吞吐量万级万级10万级10万级
时效性ms级us级ms级ms级以内
可用性高(主从架构)高(主从架构)非常高(分布式架构)非常高(分布式架构)
功能特性成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好基于Erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富MQ功能比较完备,扩展性佳只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。

【总结】

  • activeMQ:使用java实现(jms 协议),性能一般,出现早,功能单一,吞吐量低
  • rabbitmq:使用erlang实现(amqp 协议),性能好,功能丰富,吞吐量一般
  • rocketmq:使用java实现,性能好,功能最丰富,吞吐量高
  • kafka:使用scala实现,吞吐量最大,功能单一(专注读、写),主要用于大数据领域(数据又多又大)

RocketMQ简介

官网: http://rocketmq.apache.org/

在这里插入图片描述

RocketMQ是阿里巴巴2016年MQ中间件,使用Java语言开发,是一款开源的分布式消息系统(可以做集群),基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。

具有以下特点:

  1. 能够严格保证消息按照顺序消费
  2. 提供丰富的消息拉取模式
  3. 高效的订阅者水平扩展能力
  4. 实时的消息订阅机制
  5. 亿级消息堆积能力

相关重要概念

  • Producer(生产者):消息的发送者;举例:发件人
  • Consumer(消费者):消息的接收者;举例:收件人
  • Broker:暂存和传输消息的通道;举例:快递公司
  • NameServer:管理Broker,相当于broker的注册中心,保留了broker的信息;举例:各个快递公司的管理机构
  • Queue(队列):消息真实存放的位置,一个Broker中可以有多个队列
  • Topic(主题):消息的分类(虚拟的结构,用来区分不同类型的消息)
  • ProducerGroup(生产者组)
  • ConsumerGroup(消费者组):多个消费者组可以同时消费一个主题的消息

【单机版本结构】

在这里插入图片描述

【消息发送流程】

  • Producer 询问 NameServer,NameServer 分配一个 broker,Producer 将消息发给 broker
  • Consumer 询问 NameServer,得到消息所在具体的broker,然后消费消息

RocketMQ为何高可用

如何设计高可用消息队列?

光是这样设置,不是高可用的,一旦broker挂了,业务就中断

在这里插入图片描述

  • 使用broker集群实现写的高可用

在这里插入图片描述

  • 使用主从同步实现读的高可用。读可以去主节点读,也可以去从节点读(负载均衡)

在这里插入图片描述

Broker内部结构

一个Broker里面可以存放多个Topic,一个Topic里面可以存放多个队列

在这里插入图片描述

生产和消费理解

在这里插入图片描述

消费模式

MQ的消费模式可以大致分为两种

  • 推 Push :服务端【MQ】主动推送消息给客户端,优点是**及时性较好,**但如果客户端没有做好流控,一旦服务端推送大量消息到客户端时,就会导致客户端消息堆积甚至崩溃(客户端压力大
  • 拉 Pull :客户端需要主动到服务端【MQ】拉取数据,优点是客户端可以依据自己的消费能力进行消费,拉取的频率需要用户自己控制(压力可控,可以一次性拉取一批数据,效率更高),拉取频繁容易造成服务端和客户端的网络传输压力,拉取间隔长又容易造成消费不及时(实时性不强
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test-consumer-group");
DefaultMQPushConsumer consumer = new DefaultMQPullConsumer("test-consumer-group");

Push模式也是基于pull模式的(不管是push还是pull,实际底层都是pull),只能客户端内部封装了api(每隔一段时间去pull一次)

  • 一般场景下,上游消息生产量小或者均速的时候,选择push模式
  • 在特殊场景下,例如电商大促,抢优惠券等场景可以选择pull模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434896.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC教程:如何用Stable Diffusion+ControlNet做角色设计?

前言 对于生成型AI的画图能力,尤其是AI画美女的能力,相信同行们已经有了充分的了解。然而,对于游戏开发者而言,仅仅是漂亮的二维图片实际上很难直接用于角色设计,因为,除了设计风格之外,角色设…

S32K312 RTD 4.0.0 版本 OCU 例程配置流程说明

一、前言 由于 RTD 4.0.0 版本并没有 S32K312 相关例程,本文基于已有的 S32K344 OCU 例程,新建 S32K312 工程,讲解 OCU 例程的相关配置流程。 二、基本概念 OCU(Output Compare Unit – 输出比较单元)本质上是一个计…

工业数据采集系统

一、网页部分代码 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…

c语言200例 066

大家好&#xff0c;欢迎来到无限大的频道 今天给大家带来的是c语言200例。 要求&#xff1a; 根据输入的职业表示&#xff0c;区分是老师还是学生&#xff0c;然后根据输入的信息&#xff0c;将对应的信息输出&#xff0c;如果是学生&#xff0c;则输出班级&#xff0c;如果是…

电子连接器信号完整性仿真实训教程 一

电子连接器信号完整性仿真学习除需要熟悉软件的基本操作外&#xff0c;还需要基本的实际操作练习才能完全掌握&#xff0c;学以致用。因此推出几期实训教程&#xff0c;教程中将不再详细讲怎么一步一步操作软件&#xff0c;重点讲一些步骤&#xff0c;及一些技巧。也会将连接器…

人工值守向无人值守转变的智慧油站开源了

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用…

OpenCV图像文件读写(4)解码图像数据函数imdecode()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从内存缓冲区读取图像。 imdecode 函数从指定的内存缓冲区读取图像。如果缓冲区太短或包含无效数据&#xff0c;函数将返回一个空矩阵 (Mat::dat…

基于STM32的无人驾驶汽车路径规划与视觉识别系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 摄像头图像采集与处理路径规划算法实现实时视觉障碍物检测电机控制与执行应用场景结论 1. 引言 无人驾驶技术是当前自动化和人工智能领域的热门课题之一&#xff0c;涉及到复杂的感知、…

(二)Mat类

构造函数 Mat m(3, 2, CV_8UC3, Scalar(0, 0, 255)); std::cout << m << std::endl;创建一个行数为3&#xff0c;列数为2&#xff0c;图像元素是8位无符号整型&#xff0c;且有3个通道&#xff0c;图像所有像素值被初始化为(0,0,255) opencv中默认的颜色顺序为BGR…

第五十八周周报 FE-GNN

文章目录 week58 FE-GNN摘要Abstract一、大数据相关1. 完全分布式zookeeper2. 污水处理过程2.1 污水处理的基本方法2.2 污水处理基本工艺流程 二、文献阅读1. 题目2. Abstract3. 文献解读3.1 Introduce3.2 创新点 4. 网络框架4.1 特征子空间平坦化4.2 结构化主成分4.3 结论 5. …

OJ在线评测系统 前端创建题目(增) 更新题目(改) 题目列表(查) 以及做题页面的开发 基于VUECLI脚手架画界面

目录 前端创建页面的开发一 创建一个路由 用acro design写 前端创建页面的开发二 题目管理页面 搜索 最終效果 题目更新页面的开发 携带参数的那种 修改路由 页码更新细节 我们先处理菜单项的权限控制和权限隐藏 在这里改 属性绑定一个函数 可以参考聚合搜索项目…

Spring Boot项目连接Oracle数据库启动报错:Undefined Error

描述&#xff1a;远程拉下来的代码&#xff0c;配置了maven仓库后&#xff0c;未进行其他修改&#xff0c;自己本地启动报错。 报错现状&#xff1a; 解决&#xff1a;添加参数-Duser.nameuser后&#xff0c;启动成功。 原因分析&#xff1a; 分析一&#xff1a; maven仓…

第三节-类与对象(中)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类&#xff08;空类大小为1&#xff09;。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;…

【html网页制作】旅游风景主题网页制作含css动画及js特效(8页面附效果源码)

HTMLCSS旅游风景主题旅游网页制作 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果菜单切换效果PageA、整体页Page1、首页Page2、旅行趣事页Page3、旅行美景页Page4、旅行指南页Page5、旅行视频页Page6、留言页Page7、西湖简介…

论文阅读(十一):CBAM: Convolutional Block Attention Module

文章目录 1.Introduction2.Convolutional Block Attention ModuleExperimentsConclusion 论文题目&#xff1a;CBAM: Convolutional Block Attention Module&#xff08;CBAM&#xff1a;卷积注意力机制&#xff09;   论文链接&#xff1a;点击跳转   代码链接&#xff1a…

汽车3d动画渲染选择哪个?选择最佳云渲染解决方案

面临汽车3D动画渲染挑战&#xff1f;选择正确的云渲染服务至关重要。探索最佳解决方案&#xff0c;优化渲染效率&#xff0c;快速呈现逼真动画。 汽车3d动画渲染选择哪个&#xff1f; 对于汽车3D动画渲染&#xff0c;选择哪个渲染器取决于你的项目需求、预算和期望的效果。Ble…

Llama 3.1 技术研究报告-2

3.3 基础设施、扩展性和效率 我们描述了⽀持Llama 3 405B⼤规模预训练的硬件和基础设施&#xff0c;并讨论了⼏项优化措施&#xff0c;这些措施提⾼了训练效率。 3.3.1 训练基础设施 Llama 1和2模型在Meta的AI研究超级集群&#xff08;Lee和Sengupta&#xff0c;2022&#x…

探索存内计算的未来,高能效内存计算实训专场有感~

写在前面&#xff0c;首先感谢活动方&#xff1a;存内计算开发者社区的邀请来参加本次探索存内计算的未来&#xff0c;高能效内存计算实训专场。下面我给大家分享一下本次的活动实操感受&#x1f600;。 活动议程 本次活动邀请存内技术专家李阳老师分享存内计算是什么&#xf…

Subdominator:一款针对漏洞奖励计划的子域名安全枚举工具

关于Subdominator Subdominator是一款针对漏洞奖励计划的子域名安全枚举工具&#xff0c;可用于在漏洞搜寻和侦察过程中进行被动子域名枚举。它旨在通过高效枚举子域名和各种免费被动资源来帮助研究人员和网络安全专业人员发现潜在的安全漏洞。 Subdominator 与各种免费和付费…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-24

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-24 1. Enriching Datasets with Demographics through Large Language Models: What’s in a Name? K AlNuaimi, G Marti, M Ravaut, A AlKetbi, A Henschel… - arXiv preprint arXiv …, 2024 通过大型语言…