windows下安装RocketMQ
一、下载文件
这里我们采用4.7.1版本的rocketmq,进入4.7.1版本界面,选择二进制版下载.以下为二进制版下载地址,直接点击下载即可:4.7.1二进制版下载
二、环境准备
2.1 环境版本
项目 | 属性 |
---|---|
系统 | windows server 2012 |
JDK版本 | JDK1.8 |
rocketmq | 4.7.1 |
2.2 设置环境变量
ROCKETMQ需要使用JAVA环境,因此需要先配置好JAVA的环境变量,步骤省略。
-
2.2.1 设置ROCKETMQ_HOME
变量名:ROCKETMQ_HOME
变量值:D:\rocketmq(你的MQ解压后的路径,到bin目录的上级即可)
-
2.2.2 设置NAMESRV_ADDR
变量名:NAMESRV_ADDR
变量值:localhost:9876(IP和端口具体情况设定,我这里采用单机部署因此可以用localhost。)
三、启动
3.1 启动name-server
-
以管理员身份运行powershell,键入以下命令:
$host.ui.RawUI.WindowTitle="rocketmq-name-server" # 修改窗口标题,防止过多的窗口不好定位目标 cd 'D:\rocketmq' # 进入rocketmq解压后的文件夹,视具体情况进行修改 .\bin\mqnamesrv.cmd # 启动name-server
-
name-server启动完成后的界面:
3.2 启动broker
- 重新以管理员身份运行一个powershell,键入以下命令:
$host.ui.RawUI.WindowTitle="rocketmq-broker" # 修改窗口标题,防止过多的窗口不好定位目标 cd 'D:\rocketmq' # 进入rocketmq解压后的文件夹,视具体情况进行修改 .\bin\mqbroker.cmd autoCreateTopicEnable=true # 启动broker
- broker启动完成后的界面:
四、测试消息
-
消费消息测试
重新打开一个powershell,执行命令:.\bin\tools.cmd org.apache.rocketmq.example.quickstart.Consumer
消费者测试完成,等待消息发送。。。。。。 -
发送消息测试
最好是将消费消息的powershell和发送消息的powershell并排放置,这样能看到当消息一经发送,消费者powershell就开始滚动接受消息。
重新打开一个powershell,执行命令:
.\bin\tools.cmd org.apache.rocketmq.example.quickstart.Producer
消息发送测试成功,消息成功被消费者接收消费。
五、碰到的问题与解决
-
5.1 找不到或无法加载主类 Files\rocketmq\Files\rocketmq\lib
由于rocketmq启动时会将自身目录下的lib目录加入到依赖路径里面去,因此当此路径存在空格的时候会出现这个异常。注意这里我用的路径是D:\Program Files\rocketmq
,环境变量里面的ROCKETMQ_HOME
对用的也是配置这个D:\Program Files\rocketmq
,Program Files中间是有空格的。
因此需要把RocketMQ移出Program Files或者将Program Files重命名取消空格(这个不推荐,因为正常来说Program Files目录下肯定安装了很多软件,一改全完蛋。)。
所以当把RocketMQ移到了D盘根目录下,环境变量也对应修改为根目录下,是不会有这个问题的。 -
5.2 找不到或无法加载主类Files\Java\jdk1.8.0_144\lib;D:\Program
上面说到rocketmq会将lib目录加到依赖路径里面去,那么同样肯定会将JAVA的classPath加进运行路径里面去。这个问题就是在拼接classPath时有些版本的windows不能完整的解析拼接命令导致的异常。这里我们是在运行broker时候出现的异常,因此去看下bin目录下的runbroker.cmd(运行的是mqbroker.cmd,实际打开的是runbroker.cmd)文件里面的内容:
看到第26行,我们需要将:set CLASSPATH=.;%BASE_DIR%conf;%CLASSPATH%
改为(对%CLASSPATH%添加英文的双引号):
set CLASSPATH=.;%BASE_DIR%conf;"%CLASSPATH%"
改完后的文件:
然后重新运行命令即可成功启动:.\bin\mqbroker.cmd autoCreateTopicEnable=true
-
5.3 连接不上nameServer或者broker,报RemotingConnectException: connect to <…:10911> failed或者connect to <…:9876> failed
- 5.3.1.检查 防火墙
防火墙需要开放9876,10909,10911,10912四个端口,如果在windows下远程端口需要改为所有端口。
- 5.3.2.检查broker.conf
如果防火墙开放或者防火墙关闭还是连接不上,考虑是因为多网卡引起的IP配置问题,需要把brokerIP1和brokerIP2改为正常可访问的IP。autoCreateTopicEnable=true listenPort=10911 brokerIP1=对外IP brokerIP2=对外IP
- 5.3.1.检查 防火墙
-
5.4 unable to calculate a request signature
Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 1 DESC: org.apache.rocketmq.acl.common.AclException: [10015:signature-failed] unable to calculate a request signature. error=[10015:signature-failed] unable to calculate a request signature. error=Algorithm HmacSHA1 not available, org.apache.rocketmq.acl.common.AclSigner.signAndBase64Encode(AclSigner.java:84)
-
5.4.1 修改tools的lib地址
在tools.cmd(Linux下是tools.sh)中${JAVA_HOME}/jre/lib/ext后加上jre>lib>ext文件夹的绝对路径(jdk路径同级的那个jre目录)。
例如我的目录地址为:E:\Java\jdk1.8_64\jre\lib\extset "JAVA_OPT=%JAVA_OPT% -Djava.ext.dirs="%BASE_DIR%\lib";"%JAVA_HOME%\jre\lib\ext";"%JAVA_HOME%\lib\ext";"E:\Java\jdk1.8_64\jre\lib\ext""
-
5.4.2 复制jar包
如果修改tools里面的lib地址还是无效,则直接从jre>lib>ext目录中复制sunjce_provider.jar
到rocketmq安装路面下的lib目录里面即可。
-