当前位置: 首页 > news >正文

【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模式

相关文章:

【RocketMQ】MQ与RocketMQ介绍

🎯 导读:本文介绍了消息队列(MQ)的基本概念及其在分布式系统中的作用,包括实现异步通信、削峰限流和应用解耦等方面的优势,并对ActiveMQ、RabbitMQ、RocketMQ及Kafka四种MQ产品进行了对比分析,涵…...

【笔记】自动驾驶预测与决策规划_Part4_时空联合规划

文章目录 0. 前言1. 时空联合规划的基本概念1.1 时空分离方法1.2 时空联合方法 2.基于搜索的时空联合规划 (Hybrid A* )2.1 基于Hybrid A* 的时空联合规划建模2.2 构建三维时空联合地图2.3 基于Hybrid A*的时空节点扩展2.4 Hybrid A* :时空节…...

Linux指令收集

文件和目录操作 ls: 列出目录内容。 -l 显示详细信息。-a 显示隐藏文件(以.开头的文件)。cd: 改变当前工作目录。 cd ~ 返回主目录。cd .. 上移一级目录。pwd: 显示当前工作目录。mkdir: 创建目录。 mkdir -p path/to/directory 创建多级目录。rmdir: 删…...

《C++并发编程实战》笔记(五)

五、内存模型和原子操作 5.1 C中的标准原子类型 原子操作是不可分割的操作&#xff0c;它或者完全做好&#xff0c;或者完全没做。 标准原子类型的定义在头文件<atomic>中&#xff0c;类模板std::atomic<T>接受各种类型的模板实参&#xff0c;从而创建该类型对应…...

在Python中实现多目标优化问题(5)

在Python中实现多目标优化问题 在Python中实现多目标优化&#xff0c;除了传统的进化算法&#xff08;如NSGA-II、MOEA/D&#xff09;和机器学习辅助的方法之外&#xff0c;还有一些新的方法和技术。以下是一些较新的或较少被提及的方法&#xff1a; 1. 基于梯度的多目标优化…...

【Linux:共享内存】

共享内存的概念&#xff1a; 操作系统通过页表将共享内存的起始虚拟地址映射到当前进程的地址空间中共享内存是由需要通信的双方进程之一来创建但该资源并不属于创建它的进程&#xff0c;而属于操作系统 共享内存可以在系统中存在多份&#xff0c;供不同个数&#xff0c;不同进…...

今年Java回暖了吗

今年回暖了吗 仅结合师兄和同学的情况 BG 大多双非本 少部分211本 985硕 去年十月一之前 基本转正都失败 十月一之前0 offer 只有很少的人拿到美团 今年十月一之前 有HC的基本都转正了&#xff08;美团、字节等&#xff09;&#xff0c;目前没有HC的说也有机会&#xff08;…...

a = Sw,其中a和w是向量,S是矩阵,求w等于什么?w可以写成关于a和S的什么样子的公式

给定公式&#xff1a; a S w a S w aSw 其中&#xff1a; a a a 是已知向量&#xff0c; S S S 是已知矩阵&#xff0c; w w w 是未知向量。 我们的目标是求解 w w w&#xff0c;即将 w w w 表示为 a a a 和 S S S 的函数。 情况 1&#xff1a;矩阵 S S S 可逆 如果矩…...

多线程事务管理:Spring Boot 实现全局事务回滚

多线程事务管理:Spring Boot 实现全局事务回滚 在日常开发中,我们常常会遇到需要在多线程环境下进行数据库操作的场景。这类操作的挑战在于如何保证多个线程中的数据库操作要么一起成功,要么一起失败,即 事务的原子性。尤其是在多个线程并发执行的情况下,确保事务的一致性…...

Vue3 中集成海康 H5 监控视频播放功能

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:Vue-集成海康 H5 监控视频播放功能 目录 一、引言 二、环境搭建 三、代码解析 子组件部分 1.…...

Linux: eBPF: libbpf-bootstrap-master 编译

文章目录 简介编译运行展示输出展示:简介 这个是使用libbpf的一个例子; 编译 如果是一个可以联网的机器,这个libbpf-bootstrap的编译就方便了,完全是自动化的下载依赖文件;如果没有,就只能自己准备这些个软件。 需要:libbpf-static; [root@RH8-LCP c]# makeLIB …...

1.1.4 计算机网络的分类

按分布范围分类&#xff1a; 广域网&#xff08;wan&#xff09; 城域网&#xff08;man&#xff09; 局域网&#xff08;lan&#xff09; 个域网&#xff08;pan&#xff09; 注意&#xff1a;如今局域网几乎采用“以太网技术实现”&#xff0c;因此“以太网”几乎成了“局域…...

周家庄智慧旅游小程序

项目概述 周家庄智慧旅游小程序将通过数字化手段提升游客的旅游体验&#xff0c;依托周家庄的自然与文化资源&#xff0c;打造智慧旅游新模式。该小程序将结合虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和人工智能等技术&#xff0c;提供丰富的…...

【在Linux世界中追寻伟大的One Piece】命名管道

目录 1 -> 命名管道 1.1 -> 创建一个命名管道 1.2 -> 匿名管道与命名管道的区别 1.3 -> 命名管道的打开规则 1.4 -> 例子 1 -> 命名管道 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据&…...

如意控物联网项目-ML307R模组软件及硬件调试环境搭建

软件及硬件调试环境搭建 1、 软件环境搭建及编译 a) 打开官方SDK&#xff0c;内涵APP-DEMO&#xff0c;通过vscode打开程序&#xff0c; 软件程序编写及编译参考下边说明文档链接 OneMO线上服务平台 编译需预安装python3.7以上版本&#xff0c;安装完python后&#xff0c;打开…...

大模型分布式训练并行技术(九)-总结

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…...

uniapp view设置当前view之外的点击事件

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

【Mybatis篇】动态SQL的详细带练

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 文章目录 &#x1f3af;一.动态SQL简单介绍 &#x1f6a6;动态S…...

【MyBatis-Plus】 学习记录 常用功能及代码生成器使用

文章目录 1. 环境准备2. 创建基础实体类3. 编写 Mapper 接口4. Service 层5. 控制器层6. 分页功能7. 条件构造器8. 配置乐观锁9. 常见问题10. 代码生成器1. 创建数据库表2. 引入依赖3. 配置数据库连接4. 编写代码生成器5. 运行代码生成器6. 查看生成的代码 MyBatis-Plus 是一个…...

HalconDotNet实现OCR详解

文章目录 一、基于字符分割的 OCR二、基于模板匹配的 OCR三、基于深度学习的 OCR四、基于特征提取的 OCR五、基于区域建议的 OCR 一、基于字符分割的 OCR 字符分割是 OCR 中的一个重要步骤。首先&#xff0c;对包含文本的图像进行预处理&#xff0c;如去噪、二值化等操作&#…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...