1.修改启动类配置
进入 Run Configuration
在 namesvr 这个模块中找到启动类 NamesrvStartup,在绿色箭头处右键 Modify Run Configuration
进入到启动类配置界面,接着需要配置 ROCKETMQ_HOME 这个环境变量,因为 NameServer 启动的时候要求有这个环境变量,因此需要在 NamesrvStartup 这个启动类的配置界面加入一个环境变量。找到 Enviroment variables 环境变量配置,点击右边的一个按钮。
进入 Enviroment variables
进入到环境变量编辑界面,点击+号添加环境变量
比如我这里选的目录就是 D:\Java\RocketMQ\NameServer,这个是运行目录,不要和 RocketMQ 源码目录一样。
配好后,点击 OK 返回上一个界面,此时 Enviroment variables 出现了刚配的目录,然后点击 OK 就可以。
配好后 Run/Debug Configurations 那里就出现了 NamesrvStartup 这个启动类配置
2.添加所需文件
创建所需目录
在刚刚配的 D:\Java\RocketMQ\NameServer 运行目录下创建我们所需的目录结构,此时创建 conf、logs、store 三个文件夹,后续 NameServer 运行需要使用一些目录。
添加配置文件
将 RocketMQ 源码目录中 distrbution 模块中的 broker.conf、logback_namesrv.xml 两个文件拷贝到刚刚新建的 conf 目录下。
接着需要修改这两个配置文件
修改 logback_namesrv.xml
首先修改 logback_namesrv.xml 这个文件,将该文件中所有的 ${user.home} 修改为配置的 ROCKETMQ_HOME 运行目录
修改 broker.conf
将 broker.conf 文件改成如下所示,将其中的 ${ROCKETMQ_HOME} 改为环境变量中配置的运行目录,我的话就是配置成 D:\Java\RocketMQ\NameServer
brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0# nameserver 地址namesrvAddr = 127.0.0.1:9876deleteWhen = 04fileReservedTime = 48brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSH# 存储路径,设置为 ${ROCKETMQ_HOME}/storestorePathRootDir = ${ROCKETMQ_HOME}/store# commitLog 的存储路径storePathCommitLog = ${ROCKETMQ_HOME}/store/commitlog# consume queue 文件的存储路径storePathConsumeQueue = ${ROCKETMQ_HOME}/store/consumequeue# 消息索引文件的存储路径storePathIndex = ${ROCKETMQ_HOME}/store/index# checkpoint 文件的存储路径storeCheckpoint = ${ROCKETMQ_HOME}/store/checkpoint# abort 文件的存储路径abortFile = ${ROCKETMQ_HOME}/abort
3.启动 NameServer
万事俱备,接着在 IDEA 中以 Debug 模式启动 NameServer,他会自动的找到 ROCKETMQ_HOME 环境变量,也就是运行目录,会读取 conf 中的配置文件,所有日志都会打印在 logs 目录中,然后所有数据都会写在 store 目录里。启动成功后,会在控制台输出这段提示。
namesrv.log 文件会输出如下:
2021-10-19 20:08:49 INFO main - rocketmqHome=D:\Java\RocketMQ\NameServer2021-10-19 20:08:49 INFO main - kvConfigPath=C:\Users\hncboy\namesrv\kvConfig.json2021-10-19 20:08:49 INFO main - configStorePath=C:\Users\hncboy\namesrv\namesrv.properties2021-10-19 20:08:49 INFO main - productEnvName=center2021-10-19 20:08:49 INFO main - clusterTest=false2021-10-19 20:08:49 INFO main - orderMessageEnable=false2021-10-19 20:08:49 INFO main - listenPort=98762021-10-19 20:08:49 INFO main - serverWorkerThreads=82021-10-19 20:08:49 INFO main - serverCallbackExecutorThreads=02021-10-19 20:08:49 INFO main - serverSelectorThreads=32021-10-19 20:08:49 INFO main - serverOnewaySemaphoreValue=2562021-10-19 20:08:49 INFO main - serverAsyncSemaphoreValue=642021-10-19 20:08:49 INFO main - serverChannelMaxIdleTimeSeconds=1202021-10-19 20:08:49 INFO main - serverSocketSndBufSize=655352021-10-19 20:08:49 INFO main - serverSocketRcvBufSize=655352021-10-19 20:08:49 INFO main - serverPooledByteBufAllocatorEnable=true2021-10-19 20:08:49 INFO main - useEpollNativeSelector=false2021-10-19 20:08:51 INFO main - Server is running in TLS permissive mode2021-10-19 20:08:51 INFO main - Tls config file doesn't exist, skip it2021-10-19 20:08:51 INFO main - Log the final used tls related configuration2021-10-19 20:08:51 INFO main - tls.test.mode.enable = true2021-10-19 20:08:51 INFO main - tls.server.need.client.auth = none2021-10-19 20:08:51 INFO main - tls.server.keyPath = null2021-10-19 20:08:51 INFO main - tls.server.keyPassword = null2021-10-19 20:08:52 INFO main - tls.server.certPath = null2021-10-19 20:08:52 INFO main - tls.server.authClient = false2021-10-19 20:08:52 INFO main - tls.server.trustCertPath = null2021-10-19 20:08:52 INFO main - tls.client.keyPath = null2021-10-19 20:08:52 INFO main - tls.client.keyPassword = null2021-10-19 20:08:52 INFO main - tls.client.certPath = null2021-10-19 20:08:52 INFO main - tls.client.authServer = false2021-10-19 20:08:52 INFO main - tls.client.trustCertPath = null2021-10-19 20:08:52 INFO main - Using JDK SSL provider2021-10-19 20:08:54 INFO main - SSLContext created for server2021-10-19 20:08:56 INFO main - Try to start service thread:FileWatchService started:false lastThread:null2021-10-19 20:08:56 INFO FileWatchService - FileWatchService service started2021-10-19 20:08:56 INFO NettyEventExecutor - NettyEventExecutor service started2021-10-19 20:08:56 INFO main - The Name Server boot success. serializeType=JSON
