RocketMQ入门二(图文结合)搭建本地环境
搭建本地环境启动我的第一个Demo
上个章节我们讲述了学习RocketMQ所用到的几个组件,没有看的同学强烈推荐一起学习一下上个章节的内容---> RocketMQ各个组件的作用
本节我们启动RocketMQ
实现发送消息,到消费者消费到这个消息的整个过程。
启动RocketMQ的方法也有很多种,我们可以下载源码包然后编译通过命令去运行,不过有的同学可能还没有安装Linux
系统,为了达到快速
的效果,我也在一个优秀的博主那里看到的另外一种启动方式,直接拉取源码然后通过简单的配置直接就能启动了,非常简单。这种方式更能让我们清晰RocketMQ启动的整个流程。
大家可以去Github
上去拉取源码:RocketMQ源码(建议大家用下面的这种方式,因为版本跟我的不对,可能流程也有变化。下面的是4.9.4版本的RocketMQ)
没有git
的小伙伴也可以直接去下载压缩包 RocketMQ源码
下载完之后解压用idea打开可以看到有很多的模块,我们接下来进入到这个包下面
package org.apache.rocketmq.example.simple;
找到Producer
这个类
没错,这个类就是我们即将运行的Demo,投递Message的地方。 大家可以尝试运行一下这个main方法 不出意外的话就会出意外,控制台提示了很多错误信息
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed
我们都知道生产者是需要注册到NameServer
上的,但是我们好像没有启动NameServer
。上一节说到了,Broker
、Producer
、consumer
都会把自己注册到NameServer
上,由此可见我们需要先启动NameServer
。后面的流程才能走通。
首先我们在本地任何一个地方创建一个文件夹,可以命名rocketmqnamesrv
,(名字可以随意只要能看出来这个文件夹是放NameServer
的有关信息即可,路径一定要记住),进入rctnameserver文件夹再创建两个文件夹conf
、store
。
文件夹里面是没有内容的,我们需要把一些数据放到里面,首先就是conf
文件夹,我们打开源码,找到
distribution/conf/这个包
这三个文件就是我们需要的文件,拷贝到到conf
里面之前,3个文件都需要稍作修改,
对broker.conf的修改
brokerClusterName = DefaultCluster
brokerName = broker-a #broker
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
autoCreateTopicEnable = false #默认是true建议关了,我们自己手动创建Topic
namesrvAddr = 127.0.0.1:9876 #nameserver地址,也代表当前的Broker要连接到这个nameserver上
#下面的就是日志和一些有关nameserver的信息,我们把${user.home} 替换成自己刚创建的到rctnameserver这
#个位置的绝对路径,我的是/Users/mac/Desktop/learning/rocketmqnamesrv
storePathRootDir = /Users/mac/Desktop/learning/rocketmqnamesrv/store
storePathCommitLog = /Users/mac/Desktop/learning/rocketmqnamesrv/store/commitlog
storePathConsumeQueue = /Users/mac/Desktop/learning/rocketmqnamesrv/store/consumequeue
storePathIndex = /Users/mac/Desktop/learning/rocketmqnamesrv/store/index
storeCheckpoint = /Users/mac/Desktop/learning/rocketmqnamesrv/store/checkpoint
对 logback_broker.xml、logback_namesrv.xml 的修改
同样的,还是将文件中的 ${user.home}
全部替换成本地 rocketmqnamesrv
的绝对路径即可。注意是全部的都要替换
修改完之后把这第三个文件拷贝到上面创建的conf
的文件夹里面。
启动Nameserver
包:org.apache.rocketmq.namesrv;
文件: NamesrvStartup
接下来设置一下环境变量就可以启动了打开Run/Debug Configurations
它的值还是和上面 ${user.home}
是一样的,为我们本地 rocketmqnamesrv
的绝对路径。接下来,我们将替换后的完整字符串 Copy 到如下图箭头所示的地方即可:
例如我的值是:ROCKETMQ_HOME=/Users/mac/Desktop/learning/rocketmqnamesrv
运行NameServer
运行main方法,结果打印:
至此,NameServer 就启动成功了。
启动Broker
包:package org.apache.rocketmq.broker;
类:BrokerStartup
我们的Broker的配置文件前面已经加入到了conf
里面,我们需要运行的时候要指定配置文件。
上面那个地方要输入 -c ${user.home}/conf/broker.conf
下面那个依旧是配置和Nameserver 的环境变量。 下面是我的配置:
在NameServer运行的前提下 我们运行main方法
如果我们看到
The broker[broker-a, 10.8.8.9:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
就代表Broker也启动成功了,但是我在启动中就遇到了一个问题,我的控制台打印的是
The broker[broker-a, 10.8.8.9:10911] boot success. serializeType=JSON
大家如果也是这个,并没有后面的and name server is 127.0.0.1:9876
那就代表当前的Broker没有注册到NameServer上,也就是配置文件的问题,一定要回到conf
文件里面的broker.conf
看看有没有namesrvAddr = 127.0.0.1:9876
这行配置。
运行 Dashboard
现在都启动成功了,但是总感觉看不见摸不着的,我们认识一下Dashboard
它是由 RocketMQ 官方提供的组件,它能够给我们的集群提供一个可视化
的界面,来帮我们更好的运维、监控
整个集群。
Dashboard 下载地址:Dashboard 源码
运行Dashboard
我们需要先拉取源码到idea上,
然后直接打开终端输入mvn spring-boot:run
(如果没有安装maven的小伙伴需要先安装maven)
进入Dashboard
启动成功之后在浏览器输入localhost:8080
进入主面(右上角可以更换语言)
我们已经看到我们配置的broker
成功注册上了,名字为broker-a
我们接着点击主题
现在还是没有任何主题的,我们创建一个TopicTest点击提交。
我们就成功的创建一个Topic
了,接下来我们运行Demo投递消息。
再打开我们的源码,打开:
〉包:org.apache.rocketmq.example.simple;
类: Producer
Message 就是要封装的消息,我们可以看到第一个参数就是要投递到哪个topic
上,这个Topic
名字要和刚才创建的一样。
运行Demo
点击运行main方法,可以在控制台打印了很多sendResult
的发送结果
SendResult[sendStatus=SEND_OK,msgId=FDD005E403A53500101CB9A70BA68AA90D9118B4AAC235F1F1210075,offsetMsgId=7F00000100002A9F00000000000066D5,messageQueue=MessageQueue[topic=TopicTest, brokerName=broker-a, queueId=4], queueOffset=7]...
至此我们的第一个Demo已经跑通了。
note: 不管是启动还是关闭服务,都要按照顺序来,启东是先启动
NameServer
,再启动Broker
,关闭服务时,先关闭Broker
,后关闭NameServer
.
问题:
1,启动可视化界面点击集群并没有Broker的一条记录,而是空的,就代表broker启动失败,或者配置有问题
打开broker.conf看看有没有配置namesrvAddr = 127.0.0.1:9876
。
2,如果在遇到了端口号占用的问题,就先解决掉之前的端口号,再重新启动。
3,如果经过反复尝试还是错误,那就把创建的文件夹,store/里面的文件都删除,把自动生成logs的也可以删了(或者文件夹都删了,重新配置),重新按照顺序启动ameserver、broker。 4, 如果启动可视化界面出现问题,如果是依赖的问题请检查pom文件的第97行,lombok版本需要跟图片的一致
结语
回顾本节,主要讲述了如何快速的搭建本地环境,并成功启动RocketMQ
,在启动的过程中我们知道要先启动NameServer
,因为Producer
、Consumer
、Broker
对NameServer
都是强依赖
,NameServer就相当于RocketMQ的大脑,所有的数据都在NameServe中。
下一篇文章结合Springboot
写一个发送消息的实例,以及如何集群部到线上
。部署的方式是在Linux
环境采用Docker
的方式部署,可以提前安装一下。
至此本节结束,有问题的小伙伴可以发出来,我们一起学习,一起探讨。
转载自:https://juejin.cn/post/7220632593812455481