1.修改启动类配置

进入 Run Configuration

namesvr 这个模块中找到启动类 NamesrvStartup,在绿色箭头处右键 Modify Run Configuration
image.png
进入到启动类配置界面,接着需要配置 ROCKETMQ_HOME 这个环境变量,因为 NameServer 启动的时候要求有这个环境变量,因此需要在 NamesrvStartup 这个启动类的配置界面加入一个环境变量。找到 Enviroment variables 环境变量配置,点击右边的一个按钮。
image.png

进入 Enviroment variables

进入到环境变量编辑界面,点击+号添加环境变量
image.png
比如我这里选的目录就是 D:\Java\RocketMQ\NameServer,这个是运行目录,不要和 RocketMQ 源码目录一样。
image.png
配好后,点击 OK 返回上一个界面,此时 Enviroment variables 出现了刚配的目录,然后点击 OK 就可以。
image.png
配好后 Run/Debug Configurations 那里就出现了 NamesrvStartup 这个启动类配置
image.png

2.添加所需文件

创建所需目录

在刚刚配的 D:\Java\RocketMQ\NameServer 运行目录下创建我们所需的目录结构,此时创建 conf、logs、store 三个文件夹,后续 NameServer 运行需要使用一些目录。
image.png

添加配置文件

将 RocketMQ 源码目录中 distrbution 模块中的 broker.conf、logback_namesrv.xml 两个文件拷贝到刚刚新建的 conf 目录下。
image.png
接着需要修改这两个配置文件
image.png

修改 logback_namesrv.xml

首先修改 logback_namesrv.xml 这个文件,将该文件中所有的 ${user.home} 修改为配置的 ROCKETMQ_HOME 运行目录
image.png

修改 broker.conf

将 broker.conf 文件改成如下所示,将其中的 ${ROCKETMQ_HOME} 改为环境变量中配置的运行目录,我的话就是配置成 D:\Java\RocketMQ\NameServer

  1. brokerClusterName = DefaultCluster
  2. brokerName = broker-a
  3. brokerId = 0
  4. # nameserver 地址
  5. namesrvAddr = 127.0.0.1:9876
  6. deleteWhen = 04
  7. fileReservedTime = 48
  8. brokerRole = ASYNC_MASTER
  9. flushDiskType = ASYNC_FLUSH
  10. # 存储路径,设置为 ${ROCKETMQ_HOME}/store
  11. storePathRootDir = ${ROCKETMQ_HOME}/store
  12. # commitLog 的存储路径
  13. storePathCommitLog = ${ROCKETMQ_HOME}/store/commitlog
  14. # consume queue 文件的存储路径
  15. storePathConsumeQueue = ${ROCKETMQ_HOME}/store/consumequeue
  16. # 消息索引文件的存储路径
  17. storePathIndex = ${ROCKETMQ_HOME}/store/index
  18. # checkpoint 文件的存储路径
  19. storeCheckpoint = ${ROCKETMQ_HOME}/store/checkpoint
  20. # abort 文件的存储路径
  21. abortFile = ${ROCKETMQ_HOME}/abort

3.启动 NameServer

万事俱备,接着在 IDEA 中以 Debug 模式启动 NameServer,他会自动的找到 ROCKETMQ_HOME 环境变量,也就是运行目录,会读取 conf 中的配置文件,所有日志都会打印在 logs 目录中,然后所有数据都会写在 store 目录里。启动成功后,会在控制台输出这段提示。
image.png
namesrv.log 文件会输出如下:

  1. 2021-10-19 20:08:49 INFO main - rocketmqHome=D:\Java\RocketMQ\NameServer
  2. 2021-10-19 20:08:49 INFO main - kvConfigPath=C:\Users\hncboy\namesrv\kvConfig.json
  3. 2021-10-19 20:08:49 INFO main - configStorePath=C:\Users\hncboy\namesrv\namesrv.properties
  4. 2021-10-19 20:08:49 INFO main - productEnvName=center
  5. 2021-10-19 20:08:49 INFO main - clusterTest=false
  6. 2021-10-19 20:08:49 INFO main - orderMessageEnable=false
  7. 2021-10-19 20:08:49 INFO main - listenPort=9876
  8. 2021-10-19 20:08:49 INFO main - serverWorkerThreads=8
  9. 2021-10-19 20:08:49 INFO main - serverCallbackExecutorThreads=0
  10. 2021-10-19 20:08:49 INFO main - serverSelectorThreads=3
  11. 2021-10-19 20:08:49 INFO main - serverOnewaySemaphoreValue=256
  12. 2021-10-19 20:08:49 INFO main - serverAsyncSemaphoreValue=64
  13. 2021-10-19 20:08:49 INFO main - serverChannelMaxIdleTimeSeconds=120
  14. 2021-10-19 20:08:49 INFO main - serverSocketSndBufSize=65535
  15. 2021-10-19 20:08:49 INFO main - serverSocketRcvBufSize=65535
  16. 2021-10-19 20:08:49 INFO main - serverPooledByteBufAllocatorEnable=true
  17. 2021-10-19 20:08:49 INFO main - useEpollNativeSelector=false
  18. 2021-10-19 20:08:51 INFO main - Server is running in TLS permissive mode
  19. 2021-10-19 20:08:51 INFO main - Tls config file doesn't exist, skip it
  20. 2021-10-19 20:08:51 INFO main - Log the final used tls related configuration
  21. 2021-10-19 20:08:51 INFO main - tls.test.mode.enable = true
  22. 2021-10-19 20:08:51 INFO main - tls.server.need.client.auth = none
  23. 2021-10-19 20:08:51 INFO main - tls.server.keyPath = null
  24. 2021-10-19 20:08:51 INFO main - tls.server.keyPassword = null
  25. 2021-10-19 20:08:52 INFO main - tls.server.certPath = null
  26. 2021-10-19 20:08:52 INFO main - tls.server.authClient = false
  27. 2021-10-19 20:08:52 INFO main - tls.server.trustCertPath = null
  28. 2021-10-19 20:08:52 INFO main - tls.client.keyPath = null
  29. 2021-10-19 20:08:52 INFO main - tls.client.keyPassword = null
  30. 2021-10-19 20:08:52 INFO main - tls.client.certPath = null
  31. 2021-10-19 20:08:52 INFO main - tls.client.authServer = false
  32. 2021-10-19 20:08:52 INFO main - tls.client.trustCertPath = null
  33. 2021-10-19 20:08:52 INFO main - Using JDK SSL provider
  34. 2021-10-19 20:08:54 INFO main - SSLContext created for server
  35. 2021-10-19 20:08:56 INFO main - Try to start service thread:FileWatchService started:false lastThread:null
  36. 2021-10-19 20:08:56 INFO FileWatchService - FileWatchService service started
  37. 2021-10-19 20:08:56 INFO NettyEventExecutor - NettyEventExecutor service started
  38. 2021-10-19 20:08:56 INFO main - The Name Server boot success. serializeType=JSON