【RocketMq系列-01】RocketMq安装和基本概念

RocketMq系列整体栏目


内容链接地址
【一】RocketMq安装和基本概念https://zhenghuisheng.blog.csdn.net/article/details/134486709

RocketMq安装和基本概念

  • 一,RocketMq安装和基本概念
    • 1,RocketMq基本安装(本地安装)
    • 2,Rocketmq的核心概念
      • 2.1,RocketMq组件的基本概念
      • 2.2,RocketMq的通信方式
      • 2.3,消息传输模型

一,RocketMq安装和基本概念

1,RocketMq基本安装(本地安装)

本次安装是直接安装在本地,首先先打开官网,将文件下载 https://rocketmq.apache.org/download ,这里用的版本是4.9.1的版本,下载Binary对应的zip,随后解压安装,如我这边安装在D盘目录下

在这里插入图片描述

随后在系统中,配置一个环境变量,变量名为 ROCKETMQ_HOME,变量值为解压目录

在这里插入图片描述

随后修改bin目录中的 runbroker.cmd 文件,将里面的堆内存调下一点

set "JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512m"

修改bin目录下的 runserver.cmd 文件,调小内部的堆内存和元空间内存的大小

set "JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

修改conf目录下的 broker.conf 文件,最后加入自动创建topic的配置

autoCreateTopicEnable=true

再运行bin目录下面的 mqnamesrv,cmd 文件,用于作为注册中心。在启动时可能会报错一些找不到jdk的问题,因为是默认安装,那个安装路径中有空格,重新换一个安装路径即可

在这里插入图片描述

再打开一个窗口,运行bin目录下的这个 mqbroker.cmd 文件
在这里插入图片描述

随后再新建一个环境变量,变量名为 NAMESRV_ADDR ,变量值为 localhost:9876

在这里插入图片描述

随后再开启一个窗口,通过bin目录下的 tools.cmd ,快速运行一个生产者的实例

tools.cmd org.apache.rocketmq.example.quickstart.Producer

出现以下日志之后,那么整个服务就算启动成功了。此时生产者已经往队列中投递了1000条数据

在这里插入图片描述

rocketmq的系统架构图如下,此时的Nameserver和broker已经成功开启了,并且也快速开始了一个生产者的测试类

在这里插入图片描述

随后再新开一个窗口,创建一个消费者,用于快速消费刚刚投递的一千条消息

tools.cmd org.apache.rocketmq.example.quickstart.Consumer

其消费的日志如下,最后消费者会将队列中的消息全部消费完

在这里插入图片描述

随后可以直接克隆一个项目https://rocketmq.apache.org/zh/download/#rocketmq-dashboard ,该项目是一个sprintboot的项目,直接运行即可,默认port端口是8080,如果是使用的5.0的版本,那么就需要下载这个文件https://gitcode.com/mirrors/apache/rocketmq-dashboard/overview?utm_source=csdn_github_accelerator , 本人这边选择的是4.9.1的版本,因此选择前者

localhost:8080/#/

可以发现集群,主题,消息等都是可以通过这个可视化界面查看到的

在这里插入图片描述

刚刚创建名为 TopicTest 的Topic主题,其status状态如下,主要有偏移量,队列等信息
在这里插入图片描述

队列的信息如下,会有具体的topic主题,broker的名字以及对应的队列id

MessageQueue [topic=TopicTest, brokerName=DESKTOP-B5OB02F, queueId=3]

2,Rocketmq的核心概念

其官网如下:https://rocketmq.apache.org/zh/docs/ ,因此本文的全部内容,主要是来自官网以及本人自己的总结

2.1,RocketMq组件的基本概念

在讲解rocketmq里面的各个名词之前,先看一张图,来了解整个架构的领域模型

在这里插入图片描述

消息 :Message,指的是消息系统所传输信息的物理载体,是最小的数据传输单元。就是比如说一个对象等,是生产者和消费者所处理数据的最小单位,每条消息属于一个topic主题。在mq中,消息都需要进行持久化,因此每条message都会存储在磁盘上面。

主题 :Topic,表示一类消息的集合,逻辑上是一个队列的集合。每个主题包含若干条消息,而每条消息只能属于一个主题。一个生产者可以同时发送多种topic的消息,而一个消费者只能对某种特定的topic消费,即一个消费者只能订阅和消费一种topic的消息

队列 :Message Queue,队列就是存储具体物理消息的实体,一个topic主题中可以包含多个queue,每个queue队列存放的就是该topic中的消息。queue队列对于的就是kafka中partition分区,而队列先进先出可以现实消息的顺序性,并且可以直接通过偏移量来记录消息的位置和顺序

生产者:Product,就是作为构建并传输消息的服务端,将一些业务消息封装成Message,然后发送到某一Topic的的队列中,可以通过单条消息,也可以批量发送消息。生产者和主题的关系是多对多的关系,即一个生产者可以生产多个主题的数据,一个主题的数据也可以由多个生产者生产

消费者 :Consumer,消费者就是用来处理和接收消息,将Message消息转换成业务可以理解的信息,一个消费者必须关联一个消费者组,被消费类型也由多种规模,如简单消费,push推送消息,pull拉取消息等

消费者组 :Consumer Group, 承载多个消费行为一致的消费者的负载均衡分组 。这个分组实际上是一个逻辑的概念,就是将一个大的消费者拆分成多个小消费者, 这些消费者的消费逻辑和配置保持一致,共同分担该消费组订阅的消息,实现消费能力的水平扩展

订阅关系 :Subscription,订阅关系指的是消费者组和Topic主题之间的关系,以这二者作为最小粒度。消费者组和主题之间也是多对多的关系,并且通过这个订阅关系,在内部可以实现一些过滤规则、消费进度等元数据和相关配置

NameServer 就是一个简单的Topic注册中心,支持Topic和broker的动态注册和发现,负责管理消息队列和消费者组,他维护一个全局的队列列表,以及每个队列的读写权限和消息状态。Nameserver通常可以部署多个实例,各个实例之间不进行信息通讯,每个实例上面都会保存一份完整的路由,当某个节点出现宕机的情况,客户端可以通过别的路由获取信息。

Broker :broker主要负责消息的存储、投递和查询以及保证服务高可用的保证。broker内部也可以搭建主从架构的集群。每个broker会和Nameserver建立长连接,将Topic的信息注册到NameServer里面

整个集群架构的底层实现如下:

  • 首先Broker会和Nameserver保持长连接,然后将所有的Topic主题信息注册到Nameserver中;
  • 其次是Product生产者也会和Nameserver建立长连接,会通过Nameserver的信息获取对应的Topic的master或者slave,这样Product也会和具体找到的Topic建立长连接,然后往队列中投递数据
  • 最后是Consumer消费者也是和Nameserver建立长连接,会通过Nameserver的注册中心获取对应的Topic的master或者slave,这样Consumer也会和具体找到的Topic建立长连接,然后消费队列中的数据

2.2,RocketMq的通信方式

在分布式系统的架构下,如在微服务中,经常将一些复杂的模块拆分成多个小的子模块,那么此时多个子模块之间就需要涉及到通信问题,在模块与模块中主要有两种通信的方式:**一种是同步的RPC远程调用,一种是基于中间件代理的异步通信方式。 **

RPC远程调用可以直接通过长连接的方式进行直接的请求和响应,如建立tcp连接之后,通过发送心跳包等来保持长连接,即使是在不同系统间,也可以直接进行通信,如请求方直接发送请求到被调用方,被调用方立马给请求方一个响应,从而验证此次通是否成功。

异步消息的方式如下,就是服务于服务之间无需进行强藕合,请求方只需要通过异步的将请求给代理方,通过代理立马响应一个成功的请求即可,剩余的服务全由代理去完成,而发送方不需要对代理的事情关心,这样使自身的职责更加单一。而完成这种代理的事情,一般就是交给消息中间件去完成。

在这里插入图片描述

显而易见,Rocketmq是选择后者的通信方式,这样的好处有:

  • 这样调用方和被调用方统一通过消息代理进行通信,更加的易于维护和管理,
  • 上游服务和下游服务之间的耦合性弱,让上下游服务的职责更加的单一
  • 流量削峰,通过中间件去解决业务流量大的问题,从而实现流量的缓冲

2.3,消息传输模型

在一般的消息中间件中,主要有两种消息的传输模型,分别是 点对点模式、发布订阅模式

点对点模式指的是生产端和消费端只需要通过一个队列实现,队列中的每一条消息只会被唯一的一个消费者处理。
在这里插入图片描述

发布订阅模式不同于点对点模式,在发布订阅模式中,需要消费端和主题进行订阅,每个订阅称为订阅组,如下面的M1、M2、M3,可以称为单个订阅组,只要消费者对这些消息进行了订阅,那么每个消费者都可以去消费队列中的消息,不像点对点,消费完就没了。

在这里插入图片描述

这二者通信模式之间,各有各的优势,但是Rocketmq为了更高的扩展性,采用的是发布订阅 的方式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux使用ifconifg命令,没有显示ens33

Linux使用ifconifg命令,没有显示ens33 1.问题2.步骤2.1 查看虚拟机的组件是否启动了2.2 修改网络配置文件 ONBOOT修改为yes2.3 重启网络2.4 修改网络服务配置 3.解决 1.问题 打开虚拟机准备使用xshell连接时发现连接失败,在机器上查看ip发现ens33不现实…

Mysql主从搭建

Mysql主从搭建 1.Mysql下载1.1 查看操作系统2.2 下载mysql安装包 2.Mysql安装2.1 解压2.2 目录重命名2.3 创建data,存储文件2.4 创建用户组2.5 授权用户2.6 配置环境变量2.7 编辑my.cnf2.8 创建相关目录和文件2.9 初始化数据库2.10 复制mysql.server到/etc/init.d/下…

安卓环境搭建及运行安卓应用

1 jdk安装 安卓项目也是java开发的,运行在虚拟器上,安装jdk及运行的时候,就会带上虚拟器 jdk前面已经讲过,不在讲解 2 下载安装androj studio https://developer.android.google.cn/studio?hlzh-cn 下载下来,双击…

Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一

你好,欢迎来到「Linux Shell脚本」学习专题,你将享受到免费的 Shell 编程资料,以及很棒的浏览体验。 这套 Shell 脚本学习指南针对初学者编写,它通俗易懂,深入浅出,不仅讲解了基本知识,还深入底…

数据采集与大数据架构分享

实现场景 要实现亿级数据的长期收集更新,并对采集后的数据进行整理和加工,用于人工智能的训练数据素材集。 数据采集 java支持的爬虫框架还是有很多的,如:webMagic、Spider、Jsoup等添加链接描述 pipeline处理管道 数据并发开发…

供应链|顶刊MSOM论文解读:服务竞争下的库存共享

问题背景 在汽车、玩具等行业中,零售商之间的库存共享变得十分常见。库存共享可以解决由需求不确定导致的库存错配问题。如果零售商之间同意共享库存,那么当需求较少、自身库存过剩时,可以将过剩库存卖给其他零售商;反之&#xf…

WinForms C# 导入和导出 CSV 文件 Spread.NET

使用 WinForms C# 和 VB.NET 导入和导出 CSV 文件 2023 年 11 月 17 日 使用 Spread.NET 直接在 .NET WinForms 应用程序中处理 CSV 文件。 Spread.NET可帮助您创建电子表格、网格、仪表板和表单。它包括一个强大的计算引擎,具有 450 多个函数以及导入和导出 Micros…

iptables详解:链、表、表链关系、规则的基本使用

目录 防火墙基本概念 什么是防火墙? Netfilter与iptables的关系 链的概念 表的概念 表链关系 规则的概念 查询规则 添加规则 删除iptables中的记录 修改规则 更详细的命令(5链4表) 防火墙基本概念 什么是防火墙? 在…

在VS Code中使用VIM

文章目录 安装和基本使用设置 安装和基本使用 VIM是VS Code的强大对手,其简化版本VI是Linux内置的文本编辑器,堪称VS Code问世之前最流行的编辑器,也是VS Code问世之后,我仍在使用的编辑器。 对VIM无法割舍的原因有二&#xff0…

Python中,我们可以使用pandas和numpy库对Excel数据进行预处理,包括读取数据、数据清洗、异常值剔除等

文章目录 一、什么是数据预处理二、对excel数据进行详细的数据预处理操作总结 一、什么是数据预处理 数据预处理是一种对数据进行清洗、整理、转换等操作的过程,旨在提高数据质量,使其适应模型的需求,从而改进数据挖掘或机器学习的结果。 数…

【LLM】基于LLM的agent应用(更新中)

note 在未来,Agent 还会具备更多的可扩展的空间。 就 Observation 而言,Agent 可以从通过文本输入来观察来理解世界到听觉和视觉的集成;就 Action 而言,Agent 在具身智能的应用场景下,对各种器械进行驱动和操作。 Age…

从0开始学习JavaScript--JavaScript 字符串与文本内容使用

JavaScript中的字符串和文本内容处理是前端开发中的核心技能之一。本文将深入研究字符串的创建、操作,以及文本内容的获取、修改等操作,并通过丰富的示例代码,帮助读者更全面地了解和应用这些概念。 JavaScript 字符串基础 字符串是JavaScr…

Nacos注册表解读

基本介绍 在 Nacos 中,注册表是其中一个重要的组件,用于管理服务的注册和发现。 注册表是一个存储服务实例信息的数据库,它记录了所有已注册的服务实例的相关信息,包括服务名称、IP 地址、端口号等。 通过注册表,服…

定时获取公网ip并发送邮件提醒

前一段时间路由器刷的老毛子固件“穿透服务”中定时更新阿里DDNS失败了,用了很久第一次遇到。所以需要做个备用的措施用来实时获取公网ip信息 1、基于python实现 开启邮箱的SMTP功能拿到授权码(不是登录密码) #!/usr/bin/python # -*- coding: UTF-8 -*- import …

2023年中职“网络安全“—Web 渗透测试①

2023年中职"网络安全"—Web 渗透测试① Web 渗透测试任务环境说明:1.访问地址http://靶机IP/task1,分析页面内容,获取flag值,Flag格式为flag{xxx};2.访问地址http://靶机IP/task2,访问登录页面。…

判断序列值是否单调递增 PandasSeries中的方法:is_monotonic_increasing

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 判断序列值是否单调递增 PandasSeries中的方法: is_monotonic_increasing 选择题 请问下列程序运行的的结果是: import pandas as pd s1 pd.Series([1, 2, 5]) prin…

机器学习赋予用户“超人”的能力来打开和控制虚拟现实中的工具

原创 | 文 BFT机器人 最近,剑桥的研究人员开发了一种虚拟现实应用程序,只需用户手部的移动即可打开和控制一系列3D建模工具。 来自剑桥大学的研究人员利用机器学习开发了“HotGestures”类似于许多桌面应用程序中使用的热键(快捷键&#xff…

Python (十二) 模块、包

模块 模块是以 .py后缀的文件,包含所有定义的函数和变量的文件。 模块可以被别的程序引入,以使用该模块中的函数等功能,如python 标准库、第三方模块等。 导入模块用关键词-import,from ...import 引入python标准库math模块 import math #调用…

Portraiture2024PS/LR专用智能磨皮插件,AI算法美颜,提高P图效率

ps皮肤美白磨皮滤镜有吗?ps本身无自带美白磨皮滤镜,虽然部分滤镜有磨皮、提亮功能,但往往需要搭配蒙版、通道功能使用。但ps可安装第三方软件,比如常用的磨皮插件portraiture3,那么,磨皮插件portraiture3怎…

如何在企业签名、超级签名、tf签名之间做选择

企业签名 (Enterprise Signing): 用途: 适用于企业内部发布应用,不需要经过App Store审核,可以通过企业内部渠道直接分发给员工或内部用户。限制: 仅限于企业内部使用,无法在App Store上发布或向外部用户分发。 超级签…