RocketMQ服务器运行分析|学习笔记

简介: 快速学习RocketMQ服务器运行分析

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术RocketMQ服务器运行分析学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15977


RocketMQ服务器运行分析


我们首先要把这个服务器安装,要从他的 rocket mq的官网上头去下载下来,下载下来,以后你可以把它展开,展开到这个目录中间,我们现在下载的版本是4.7.1,所以大家可以看到在这个文件目录底下有个 rocket mq的4.7.1的目录,那进去以后,大家可以看到它里头分为几个目录,其中这个bin目录里头是他所有可以执行的东西,这里头其实主要的是用来开启动和关闭这个 rocket mq 的,

image.png

我们可以看到这里有分别有启动它的 name server以及 mq的 broker的命令,那也有这个关闭的,这 个mq shutdown的这个命令就是用来去关闭我们的这个 name server和这个 broker,按照顺序首先要来启动这个 name server,在启动的时候,会用到一个命令 nohup,nohup是程序始终在运行,用 nohup让后台始终运行,命令是 nohup bin/mqnameserver关闭我们的这个 name server和这个博客。

Server,在启动的时候,我们会用到unix的一个命令,叫做这个 lo hop no hope其实是说是让这个程序始终在运行,那我们想让用 no hope 这个命令,然后让他在后台始终运行。这个 ROMQ是基于 Java的,所以说你需要把 JDK 装好,然后要把

Java home 给设好,才能跑这个 rocket MQ。

如果没有 GDK的话,没有定义交完后面的话,它跑起来会出错那运行起来以后,他的这个输出的内容放到了这个 nohup.out文件里头,就这个当前的目录下,我们可以看一下,把它输出一下看一下。

image.png

这个 out文件中间,大家可以看到最后一项是这个 name server已启动起来了,他的类型是这个 Json,这样我们就把 name server启动起来了。name server它本身使用的是这个 logoBack的日志,他的日志记录在你的这个用户的这个目录的logos底下,所以我们可以用 telnet这个命令去看一下这个日志的最后几行,后几行是一个什么样的内容。所以我们用 log命令,去在我们的这个 home目录里头的logs,然后 rocket MQ的logs里头。有一个叫做 SVXRV的 logo文件,这样就可以看到在这个用那个 bug输出的这个过程中间,同样可以看到这个 name server已经启动了。

image.png

启动 broker,broker同样我们用 nohup来启动,那在bin底下有一个mq的broker的这个文件,我们这里需要指定这个他注册的 name server,所以用-n的命令去定义说它的 name server是所有的服务器的 ip和它的端口号,端口默认是九八七六,另外我们还需要去 log一个配置文件,因为我们把关于这个 broker的一些配置信息放到它的配置文件中间,配置文件在在这个 broker cn f的目录底下,我们看一下这个配置文件是什么样的内容,然后同样的我们按照后台运行,所以要加一个这个与的符号,这样就会把这 个 broker在后台给他运行起来,运行起来以后,同样在这个 no hop.out里头也能看到它的这个输出的结果,这里可以看到这个 broker已经启动了。

image.png

然后我们到 configure的目录底下去看一下这个配置文件,我们 configure的配置文件,这里头其实主要定义了这个 broker的一些这个相关的信息,其中最重要的是那个IP,那个定义的就是她的 broker的 IP地址,同样他的日志文件也在这个 home目录底下的logos是里头,所以我们的 logos里头的 rocket MQ的logo里头。然后看一下它的这个 broker.log文件。

看到最后几行,所以用 tell的命令。那这样同样也能看到这个 beoker启动,这个命令中间我们在使用的时候其实他的相关的信息都会输出在这,但是我们其实不通过这个日志文件去看它的使用情况,我们利用那个 rocket mq的 external中间的console console 那个工程去看他的这个情况,这个工程要从 github上把它下载下来,然后进行这个编译打包,那我们这个过程我我已经把它下载下来而且编译打包过了,所以我们直接到他的这个目录中间去用 java把它跑起来,这个工程我现在让他跑的这个端口号是八零八六,所以跑起来之前我们首先定义一下它的这个工程的name server 是什么,我们在有两种方式,一种是在配置文件去改,当然不做更改的话,我们就去设那个环境变量,所以我这儿采取的方式是设了一个环境变量,用这个 name serve r的address环 境变量给他设成了我的这个 name server的这个IP地址,这样,这个工程体系就会通过这个栏目 server去获得这个name server上所有注册的broker,然后去获得这些 broke的这个 topic的路由的信息,那我们把它启动起来以后,我们就可以来看一下它的这个运行的情况,我们的 logo host 里头的8086里头。

image.png

把它启动起来,那启动起来以后,大家首先看到的是它的 dashboard,它的主界面,现在因为我还没有运行这个生产者和消费者,所以说大家可以看到里头是没有消息的,Crossed 里头可以看到我们其中的那个 brokerA,就是启动的那个broker,它的IP地址和端口号,可以看到在这个整个的所有的这个 topic的路由信息,因为我之前有启动过,所以这里头是有这个 rock topic 和 old top的,把它删掉。我们在这里这个工具也可以控制它在服务器把它删掉,那他的这个消费组同样也跑过也是有的,所以我们也把它删掉,这个要选他在哪个broker上面的这个消费者,我们把消费者也可以删掉,这样的话让程序跑起来的时候,让他去见这些

topic,登记这个消费者。

这就是这个生产者,大家看到现在没有这个生产者,还有他的这个消息。那我们来跑一下这个我们的生产者和消费者的这个工程,因为我们是用 command line wrap,所以说用他的 plug in,把这个用 spring boot的 plug in把它跑起来,它就会发送出两条消息,我们发送消息的这个内容在日志上,在这个里头虽然能看到,所以大家可以看一下这个 console上头的这个消息,首先我们发的是这个 logo的这个消息,所以我们可以看到这个3D logo message 的这个消息,那我们也能看到这个3OLDK 这个消息。

image.png

然后我们能看到说他的消费者在消费到这个消息的时候,他的这个 a message的时候的这个内容,我们这里首先看到的是这个 orderpay的这个消息,他延迟了十秒发出去的,所以大家可以注意比较一下我这个 orderpay的这个消息,在发送的时候是18:38:42,他在收到的时候是在18:39:02,所以它虽然是有一些延迟,超过了这个十秒的间隔,接近20秒的时间,才收到了这个消息,而且我们可以看到它这个日志的这个部分来说,就收得更晚一些,因为应该是说这个服务器,刚才我们把这些东西都都删掉了,所以它应该是有一个延迟的时间要新建这个 topic,新建这些东西,所以看到这个 logo日子在他更晚点才会才收到,其实如果是发的更早,而且没有延时,这样其实也能看到说这个消息服务器其实是不能保证说这个消息一定会发

送就会收到的,它实际上是一个异步的过程。

所以这里可以看到就算是发延时消息的话,他也不是保证说在延时的那个点一定会收到,他一定会在延时的点以后,才会收到这个消息啊,这是我们在这个日志中间所看到的这个信息。那我们到 console的那个页面上去看一下他的这个内容是个什么样的结果。在 console的这个界面上,我们首先看一下他的这个 message,我们刚才发了两条 message,所以这里选一下我们的这个topic。

然后可以看到在 lock topic中间,我们刚才发送的这条消息,发送的收到的时间是18:38:41,这个 topic的这个内容,大家可以看到用美容节省发的啊,所以这就很方便的能看到这个 topic 的这个内容。我们看一下这个 pay的这条消息,pay 是38分51秒收到的,那同样它的内容就是一个三,然后我们再看一下它的这个生产者,我们有一个生产这个 broker a上面所定义的这个生产者,这样可以看到我们的生产者的那个机器的 IP,还有他的这个地址。那我们再来看消费者,消费者我们因为有两个消费者的 group,分别是 a group和 logo group。我们可以看一下这些消费者的详细的信息,大家可以看到它实际上被分配了在 broker a上面的四个队列,我们只有一个消费者我们默认的这个队列其实每一个地方有四个队列,那其中来说大家注意看在四个中间第二个队列里头其实有收到了一条消息,大家可以看到它的这个outside broker 和 consumer offset就是收到的消息 controlled是他已经消费到的消息,刚才我们只发了一条消息,但是有四个队列,这个队列全部关联到了我们的这个唯一的这个消费者的上面,那其中这个消息被发送到了第二个队列里头,没有第二个队里头,而且他的这个放进去的时间应该是十八点三十八分五十一秒,这是pay group,我们来看一下这个 topic的信息,log topic 的信息同样有三个队列,被送到编号为2的队列里头,看一下这个 older pay,同样有四个队列,在ID为1的里面,这是关于他的路由信息,说明在哪一个 broker上面,就是这个 topic在哪一个 broker上面?

我们再来看一下它的这个 broker的信息。Broker 的信息里头会显示这个 broker的一些概要的内容。最后我们来看这个,刚才我们看到有处理了这个四条消息,我们其实发送了两条,因为它烧掉了两条,发收到两条,消费了两条,所以说他总共处

理的消息就是四条在 brokerA上面。

image.png

这就是我们的这个用消息服务器的这样的一个例子,所以说记住他的这个启动顺序,我们首先要启动 name server,然后再把 broke注册到启动 broke,注册到name server 上头去,然后你才会启动这个生产者和消费者啊,然后生产者发送消息,消费者去处理消息。

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
11天前
|
监控 关系型数据库 MySQL
|
1月前
|
NoSQL 关系型数据库 MySQL
涉及rocketMQ,jemeter等性能测试服务器的安装记录
涉及rocketMQ,jemeter等性能测试服务器的安装记录
38 1
|
1月前
|
消息中间件 存储 RocketMQ
RocketMQ源码分析之事务消息实现原理下篇-消息服务器Broker提交回滚事务实现原理
RocketMQ源码分析之事务消息实现原理下篇-消息服务器Broker提交回滚事务实现原理
|
1月前
|
SQL 关系型数据库 MySQL
服务器运行一段时间后
【4月更文挑战第1天】服务器运行一段时间后 需要清除日志
297 10
|
1月前
|
网络协议
​LabVIEW从另一个VI或通过VI服务器访问正在运行的可执行文件
​LabVIEW从另一个VI或通过VI服务器访问正在运行的可执行文件
22 0
|
11天前
|
IDE 物联网 网络性能优化
什么是MQTT?如何使用ESP12F芯片连接到MQTT服务器
通过上述步骤,你可以成功地使用ESP12F模块连接到MQTT服务器,发布和订阅消息。MQTT的轻量级和高效性使其非常适合各种物联网应用,而ESP12F模块的强大功能和低成本使其成为实现这些应用的理想选择。
47 0
|
2天前
|
弹性计算 关系型数据库 MySQL
阿里云ECS如何部署并运行一个JavaWeb项目
阿里云ECS如何部署并运行一个JavaWeb项目
18 0
|
24天前
|
存储 定位技术 数据中心
蓝易云 - 比较分析香港服务器有哪些优势
以上就是香港服务器的主要优势,但在选择服务器时,还需要根据自身的业务需求和预算进行综合考虑。
181 0
|
25天前
|
消息中间件 存储 JSON
服务器的异步通信——RabbitMQ2
服务器的异步通信——RabbitMQ
21 0
|
25天前
|
消息中间件 缓存 中间件
服务器的异步通信——RabbitMQ1
服务器的异步通信——RabbitMQ
13 0