RocketMQ-01 消费模型和部署模型简介

        消息队列的主要作用是对系统进行异步、削峰、解耦等,在日常开发中使用非常广泛。基于市面上几款消息队列,常见有:rabbitmq, activemq, rocketmq, kafka, Pulsar等,各有侧重,技术选型需根据自身系统业务定型。但基于国内市场,以及编程语言的占有率,阿里巴巴开源的RocketMQ无论在开发习惯,使用习惯以及设计思维上,都更符合国内系统,且经受了多次双十一的考验,整合了上述多款消息队列的优点。本系列将从0开始学习rocketMQ的搭建及使用,并给出部分场景解决方案。

1,版本

        如上图,截止目前2024/11/12,rocketmq已迭代至版本5.3.1。RocketMQ · 官方网站 | RocketMQ 将版本区分为两个大版本,5.0和4.x,区别较大,对于普通开发来讲,主要区别包括但不限于:延迟消息等级设置、混合集群模式、客户端语言限制等。目前仍有很多企业使用4.x版本,先基于4.x版本学习基础部署和理论,后续在此基础上学习5.0版本。

2,基本概念

        2.1,消息系统模型

        生产者(Producer):负责发送消息。一般由业务系统生产消息,将消息给生产者,生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。

        消费者(Consumer):负责接受消息,也称消费消息。一般是业务系统接受消息后异步消费。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。

        消息主题(Topic):表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。

        2.2,部署模型

        NameServer:注册中心,用于存储各Broker的节点位置和状态信息,以及topic与MessageQueue的路由关系,可理解为nacos,主要作用是:

        1,Broker管理。存储各Broker节点位置,发送心跳检查Broker是否存活;

        2,路由信息管理。存储topic与实际存储消息的messageQueue的路由关系,便于消息的投递与查找。

        生产者和消费者与NameServer建立长连接,定期从NameServer中获取Broker和topic的路由信息,再与Broker的主节点建立长连接,将消息发送到对应的MessageQueue,或者直接从对应的MessageQueue获取消息。Broker与NameServer建立长连接,定期将Topic路由信息注册或更新至NameServer存储。

        Broker:消息的中间服务器,用于存储消息。Topic是个逻辑概念,实际存储消息的是MessageQueue。消费者将消息根据Topic分类,发送至对应的MessageQueue,MessageQueue是FIFO的有序序列。

        消费者的推模式是Broker将消息从MessageQueue中推送给消费者,拉模式是消费者从MessageQueue中获取消息。

        拓展后的部署和消息模型架构图如下:

        如上图所示,当使用集群架构后,Broker会将MessageQueue放在不同的Broker服务中,以保证高可用性。消费端,通过消费者组,提高消费能力,可根据业务水平拓展。

        注意:4.x版本中,一个消费者可消费多个MessageQueue的消息,但一个MessageQueue只能由一个消费者消费,具体由哪个消费者消费,则依据消费者订阅的主题匹配。

3,Rocketmq项目结构

        rocketmq本质上是一个spingboot项目,所以在运行时,需要java虚拟机,并需要对JVM参数做调整,再启动该项目即可。JVM参数调整与工作中对项目的JVM调优相同。这也验证前面所说,对开发更易懂易上手。

        根据版本图也可看出,下载分为源码和linux运行版。下载Binary至服务器并解压,得到如下目录:

benchmark:压测脚本

bin:执行脚本,启动脚本

        根据前文可知,启动需要启动nameServer和Broker。

        启动nameServer:执行mqnamesrv脚本,其内部会执行runserver.sh。修改runserver.sh文件内容,调整JVM参数。如下图,根据对应的JDK版本及服务器内存,修改合适的JVM参数。默认4G堆内存。

        启动Broker:执行mqbroker脚本,其内部会执行runbroker.sh。修改runbroker.sh文件内容,调整JVM参数。如下图,根据对应的JDK版本及服务器内存,修改合适的JVM参数。默认8G堆内存。

conf:配置文件,虚拟机参数调整,nameserver/broker参数调整,常见部署方式配置文件案例等

lib:依赖jar包

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

贪心算法day03(最长递增序列问题)

目录 1.最长递增三元子序列 2.最长连续递增序列 1.最长递增三元子序列 题目链接:. - 力扣(LeetCode) 思路:我们只需要设置两个数进行比较就好。设a为nums[0],b 为一个无穷大的数,只要有比a小的数字就赋值…

基于JDBC的书库系统(MySQL)

一、创建数据库中的表 1、需求 有一张表叫javabook【创建表要求使用sql语句进行】 表中列 bookid 整数自增类型 表中列 bprice 小数类型 表中列 bookname 字符串类型 长度不能小于50 工程和包要求: domain dao …

2024 微信支付公钥 JAVA完整代码参考

需要用到的链接: 微信支付公钥使用介绍 - 平台证书 | 微信支付商户文档中心 GitHub - wechatpay-apiv3/wechatpay-java: 微信支付 APIv3 的官方 Java Library 谨记 如果有疑问 多看几遍 wechatpay-java的readme 和 example 创建预支付 Overridepublic ResultBean&…

CondaError: Run ‘conda init‘ before ‘conda activate‘解决办法

已经执行了conda init,但是还是会报错CondaError: Run ‘conda init’ before ‘conda activate’ 原因:权限不够 解决办法:以管理员身份运行cmd,然后进入要操作的文件夹下,重新执行 conda init 和 conda activate 就可…

边缘计算与推理算力:智能时代的加速引擎

在数据量爆炸性增长的今天,边缘计算与推理算力正成为推动智能应用的关键力量。智能家居、自动驾驶、工业4.0等领域正在逐步从传统的云端计算转向边缘计算,而推理算力的加入,为边缘计算提供了更强的数据处理能力和实时决策能力。本文将探讨边缘…

【Python TensorFlow】进阶指南(续篇二)

在前面的文章中,我们详细探讨了TensorFlow在实际应用中的高级功能和技术细节。本篇将继续深入探讨一些前沿话题,包括但不限于分布式训练、混合精度训练、神经架构搜索(NAS)、模型微调以及在实际项目中的最佳实践等,帮助…

JAVA后端生成图片滑块验证码 springboot+js完整案例

前言 现在大部分网部都是图片滑块验证码,这个得要与后端联动起来才是确保接口安全性 通过我们系统在发送手机短息时都会选进行滑块验证,但是我们要保证发送短息接口的全安,具体路思如下 那么这个滑块的必须是与后端交互才能保证安全性&…

机器学习—高级优化方法

梯度下降是机器学习中广泛应用的优化算法,像线性回归和逻辑回归以及神经网络的早期实现,现在有一些其他的优化算法,为了最小化成本函数,甚至比梯度下降的效果更好,这种算法可以用来帮助训练神经网络,比梯度…

【Vue3】知识汇总,附详细定义和源码详解,后续出微信小程序项目(3)

快速跳转: 我的个人博客主页👉:Reuuse博客 新开专栏👉:Vue3专栏 参考文献👉:uniapp官网 免费图标👉:阿里巴巴矢量图标库 ❀ 感谢支持!☀ 前情提要 &#x…

模型减肥秘籍:模型压缩技术 CNN基础

这里是Datawhale的组队学习活动,主要介绍的是模型压缩技术。后续将以CNN网络为基础点,带领大家领略模型压缩的魅力。首先是回顾一下一些关于CNN的基础知识。 参考链接: 模型减肥秘籍:模型压缩技术-课程详情 | Datawhale datawh…

Ollama的安装以及大模型下载教程

简介 Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型, Ollama极大地简化了在Docker容器内部署和管理LLM的过程,使得用户能够快…

Mysql前言

文章目录 Mysql 数据库简介SQL 基础语法什么是 SQL语句SQL 的作用SQL 语句的分类SQL 通用语法查询状态 🏡作者主页:点击! 🤖Mysql专栏:点击! ⏰️创作时间:2024年11月12日18点20分 SQL是数据库…

Spring Boot编程训练系统:设计与实现要点

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 管理员对用户信息修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 题库资源管理 系统管理员可以对题库资源信息进行添加,修改,删除以及查询操作。具体界面如…

Xcode 16 使用 pod 命令报错解决方案

原文请点击这个跳转 一、问题现象: 有人会遇到 Xcode 升级到 16 后,新建应用然后使用 pod init 命令会报错如下: Stack Ruby : ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-darwin23]RubyGems : 3.5.22Host : macOS 15.0 (24A335…

hive中windows子句的使用

概述 1,windows子句是对窗口的结果做更细粒度的划分 2、windows子句中有两种方式 rows :按照相邻的几行进行开窗 range:按照某个值的范围进行开窗 使用方式 (rows | range) between (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING…

Unet++改进24:添加DualConv||轻量级深度神经网络的双卷积核

本文内容:添加DualConv 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 卷积神经网络(CNN)架构通常对内存和计算要求很高,这使得它们在硬件资源有限的嵌入式系统中不可行。 我们提出了双卷积核(DualConv)来构建轻量级深度神经网络。DualConv结合3 3和1…

【Vue3】知识汇总,附详细定义和源码详解,后续出微信小程序项目(4)

快速跳转: 我的个人博客主页👉:Reuuse博客 新开专栏👉:Vue3专栏 参考文献👉:uniapp官网 免费图标👉:阿里巴巴矢量图标库 ❀ 感谢支持!☀ 前情提要 &#x…

微信小程序_小程序视图与逻辑_day3

一、目标 A. 能够知道如何实现页面之间的导航跳转 B. 能够知道如何实现下拉刷新效果 C. 能够知道如何实现上拉加载更多效果 D. 能够知道小程序中常用的生命周期 二、目录 A. 页面导航 B. 页面事件 C. 生命周期 D. WXS脚本 E. 案例-本地生活(列表页面)…

springboot社团服务系统的设计与实现,计算机毕业设计项目源码316,计算机毕设程序(LW+开题报告、中期报告、任务书等全套方案)

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套社团服务系统有管理员&#x…

Linux服务管理-kerberos

Kerberos 官网文档‘:Kerberos:网络身份验证协议 (mit.edu) 基本概念:Kerberos基本概念及原理汇总-腾讯云开发者社区-腾讯云 (tencent.com) kerberos概述 Kerberos是一种计算机网络认证协议,由麻省理工学院(MIT&#x…