likes
comments
collection
share

RocketMQ入门二(图文结合)搭建本地环境

作者站长头像
站长
· 阅读数 16

搭建本地环境启动我的第一个Demo

上个章节我们讲述了学习RocketMQ所用到的几个组件,没有看的同学强烈推荐一起学习一下上个章节的内容---> RocketMQ各个组件的作用

本节我们启动RocketMQ实现发送消息,到消费者消费到这个消息的整个过程。

启动RocketMQ的方法也有很多种,我们可以下载源码包然后编译通过命令去运行,不过有的同学可能还没有安装Linux系统,为了达到快速的效果,我也在一个优秀的博主那里看到的另外一种启动方式,直接拉取源码然后通过简单的配置直接就能启动了,非常简单。这种方式更能让我们清晰RocketMQ启动的整个流程。

大家可以去Github上去拉取源码:RocketMQ源码建议大家用下面的这种方式,因为版本跟我的不对,可能流程也有变化。下面的是4.9.4版本的RocketMQ

没有git的小伙伴也可以直接去下载压缩包 RocketMQ源码

RocketMQ入门二(图文结合)搭建本地环境

下载完之后解压用idea打开可以看到有很多的模块,我们接下来进入到这个包下面

package org.apache.rocketmq.example.simple;

找到Producer这个类

RocketMQ入门二(图文结合)搭建本地环境 没错,这个类就是我们即将运行的Demo,投递Message的地方。 大家可以尝试运行一下这个main方法 不出意外的话就会出意外,控制台提示了很多错误信息

org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed

我们都知道生产者是需要注册到NameServer上的,但是我们好像没有启动NameServer。上一节说到了,BrokerProducerconsumer都会把自己注册到NameServer上,由此可见我们需要先启动NameServer。后面的流程才能走通。

首先我们在本地任何一个地方创建一个文件夹,可以命名rocketmqnamesrv,(名字可以随意只要能看出来这个文件夹是放NameServer的有关信息即可,路径一定要记住),进入rctnameserver文件夹再创建两个文件夹confstore

文件夹里面是没有内容的,我们需要把一些数据放到里面,首先就是conf文件夹,我们打开源码,找到 distribution/conf/这个包

RocketMQ入门二(图文结合)搭建本地环境 这三个文件就是我们需要的文件,拷贝到到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入门二(图文结合)搭建本地环境 例如我的值是:ROCKETMQ_HOME=/Users/mac/Desktop/learning/rocketmqnamesrv

运行NameServer

运行main方法,结果打印:

RocketMQ入门二(图文结合)搭建本地环境 至此,NameServer 就启动成功了。

启动Broker

包:package org.apache.rocketmq.broker;
类:BrokerStartup

我们的Broker的配置文件前面已经加入到了conf里面,我们需要运行的时候要指定配置文件

RocketMQ入门二(图文结合)搭建本地环境

上面那个地方要输入 -c ${user.home}/conf/broker.conf

下面那个依旧是配置和Nameserver 的环境变量。 下面是我的配置:

RocketMQ入门二(图文结合)搭建本地环境 在NameServer运行的前提下 我们运行main方法

RocketMQ入门二(图文结合)搭建本地环境 如果我们看到

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)

RocketMQ入门二(图文结合)搭建本地环境

RocketMQ入门二(图文结合)搭建本地环境

进入Dashboard

启动成功之后在浏览器输入localhost:8080进入主面(右上角可以更换语言)

RocketMQ入门二(图文结合)搭建本地环境 我们已经看到我们配置的broker成功注册上了,名字为broker-a 我们接着点击主题 现在还是没有任何主题的,我们创建一个TopicTest点击提交。

RocketMQ入门二(图文结合)搭建本地环境 我们就成功的创建一个Topic了,接下来我们运行Demo投递消息。 再打开我们的源码,打开:

〉包:org.apache.rocketmq.example.simple;
类: Producer

RocketMQ入门二(图文结合)搭建本地环境 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入门二(图文结合)搭建本地环境

下一节:整合springboot(单机部署&集群部署)

结语

回顾本节,主要讲述了如何快速的搭建本地环境,并成功启动RocketMQ,在启动的过程中我们知道要先启动NameServer,因为ProducerConsumerBrokerNameServer都是强依赖,NameServer就相当于RocketMQ的大脑,所有的数据都在NameServe中。

下一篇文章结合Springboot写一个发送消息的实例,以及如何集群部到线上。部署的方式是在Linux环境采用Docker的方式部署,可以提前安装一下。

至此本节结束,有问题的小伙伴可以发出来,我们一起学习,一起探讨。

转载自:https://juejin.cn/post/7220632593812455481
评论
请登录