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 = DefaultCluster
brokerName = broker-a
brokerId = 0
# nameserver 地址
namesrvAddr = 127.0.0.1:9876
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 存储路径,设置为 ${ROCKETMQ_HOME}/store
storePathRootDir = ${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\NameServer
2021-10-19 20:08:49 INFO main - kvConfigPath=C:\Users\hncboy\namesrv\kvConfig.json
2021-10-19 20:08:49 INFO main - configStorePath=C:\Users\hncboy\namesrv\namesrv.properties
2021-10-19 20:08:49 INFO main - productEnvName=center
2021-10-19 20:08:49 INFO main - clusterTest=false
2021-10-19 20:08:49 INFO main - orderMessageEnable=false
2021-10-19 20:08:49 INFO main - listenPort=9876
2021-10-19 20:08:49 INFO main - serverWorkerThreads=8
2021-10-19 20:08:49 INFO main - serverCallbackExecutorThreads=0
2021-10-19 20:08:49 INFO main - serverSelectorThreads=3
2021-10-19 20:08:49 INFO main - serverOnewaySemaphoreValue=256
2021-10-19 20:08:49 INFO main - serverAsyncSemaphoreValue=64
2021-10-19 20:08:49 INFO main - serverChannelMaxIdleTimeSeconds=120
2021-10-19 20:08:49 INFO main - serverSocketSndBufSize=65535
2021-10-19 20:08:49 INFO main - serverSocketRcvBufSize=65535
2021-10-19 20:08:49 INFO main - serverPooledByteBufAllocatorEnable=true
2021-10-19 20:08:49 INFO main - useEpollNativeSelector=false
2021-10-19 20:08:51 INFO main - Server is running in TLS permissive mode
2021-10-19 20:08:51 INFO main - Tls config file doesn't exist, skip it
2021-10-19 20:08:51 INFO main - Log the final used tls related configuration
2021-10-19 20:08:51 INFO main - tls.test.mode.enable = true
2021-10-19 20:08:51 INFO main - tls.server.need.client.auth = none
2021-10-19 20:08:51 INFO main - tls.server.keyPath = null
2021-10-19 20:08:51 INFO main - tls.server.keyPassword = null
2021-10-19 20:08:52 INFO main - tls.server.certPath = null
2021-10-19 20:08:52 INFO main - tls.server.authClient = false
2021-10-19 20:08:52 INFO main - tls.server.trustCertPath = null
2021-10-19 20:08:52 INFO main - tls.client.keyPath = null
2021-10-19 20:08:52 INFO main - tls.client.keyPassword = null
2021-10-19 20:08:52 INFO main - tls.client.certPath = null
2021-10-19 20:08:52 INFO main - tls.client.authServer = false
2021-10-19 20:08:52 INFO main - tls.client.trustCertPath = null
2021-10-19 20:08:52 INFO main - Using JDK SSL provider
2021-10-19 20:08:54 INFO main - SSLContext created for server
2021-10-19 20:08:56 INFO main - Try to start service thread:FileWatchService started:false lastThread:null
2021-10-19 20:08:56 INFO FileWatchService - FileWatchService service started
2021-10-19 20:08:56 INFO NettyEventExecutor - NettyEventExecutor service started
2021-10-19 20:08:56 INFO main - The Name Server boot success. serializeType=JSON