网上关于RocketMq的文章特别多,唯独关于在Windows系统上安装的教程特别少,就连官网也是基于Linux命令来启动的。可能很多人会说把Linux的执行程序换成Windows的cmd程序就行了,此方法在大部分情况下是可以的,唯独RocketMq是个例外。
官方文档中提到,RocketMq提供了一种新的gRPC 协议,该协议必须使用RocketMq5的版本,并且启用proxy模式,当然,你也可以使用老版本的Remoting协议,而这两种协议决定了你开发过程中使用到的sdk不同,官方推荐使用新的gRPC协议,因此,必须按照他的要求启动RocketMq才能正常连接使用。
本文将讲解如何在Windows上快速启动一个RocketMq,并且启用proxy模式,方便本地开发时使用。
安装教程
下载安装
具体的下载过程可以参考官方文档。下载完毕后,解压,配置ROCKETMQ_HOME环境变量。
此外,还要配置jdk环境变量,注意要配置JDK8,官方虽然说要求JDK8+,但是亲测jdk17启动会有问题,应该是启动脚本的原因。
启动NameServer
我们进入RocketMq的bin目录下,在地址栏输入cmd,打开命令窗口,或者直接打开一个cmd窗口,切换工作路径到bin目录下。
运行命令:
start mqnamesrv.cmd
D:\develop\rocketmq-all-5.1.1-bin-release\bin>start mqnamesrv.cmd
此时会打开一个新的窗口,看见类似日志The Name Server boot success.表示启动成功。
在bin目录下创建一个mqbrokerproxy.cmd文件
文件内容如下:
if not exist "%ROCKETMQ_HOME%\bin\runserver.cmd" echo Please set the ROCKETMQ_HOME variable in your environment! & EXIT /B 1 call "%ROCKETMQ_HOME%\bin\runserver.cmd" org.apache.rocketmq.proxy.ProxyStartup -pm local %* IF %ERRORLEVEL% EQU 0 ( ECHO "Broker Proxy Model starts OK" )
启动刚才创建的cmd文件,有可能会因为内存不够启动失败,网上一大堆安装教程里面第一步骤就是修改RocketMq的内存限制的。主要是修改runbroker.cmd文件和runserver.cmd文件。注意,C盘空间一定要留够,建议20GB以上,否则就算磁盘没有满,发送消息也会报错。
start mqbrokerproxy.cmd -n 127.0.0.1:9876
我们可以通过
jps
命令,查看服务是否启动成功。C:\Users\jq125>jps 18624 NamesrvStartup 15064 Launcher 20152 Jps 15516 RemoteMavenServer36 2076 ProxyStartup 6108
创建Topic
第一行是命令的用法,对应的地方都需要根据实际情况替换,type后面可以有Normal,DELAY,FIFO,TRANSACTION
后面几条命令分别创建了普通Topic,延时Topic,顺序Topic,事务Topic。
start mqadmin.cmd updateTopic -n <nameserver_address> -t <topic_name> -c <cluster_name> -a +message.type=Normal start mqadmin.cmd updatetopic -n localhost:9876 -t TestTopic -c DefaultCluster start mqadmin.cmd updateTopic -c DefaultCluster -t DelayTopic -n 127.0.0.1:9876 -a +message.type=DELAY start mqadmin.cmd updatetopic -n localhost:9876 -t FifoTopic -c DefaultCluster -a +message.type=FIFO start mqadmin.cmd updatetopic -n localhost:9876 -t TransactionTopic -c DefaultCluster -a +message.type=TRANSACTION
使用tools.cmd创建并消费消息
首先在系统变量中指定NameServer地址:
然后在bin目录下执行脚本:
start tools.cmd org.apache.rocketmq.example.quickstart.Producer start tools.cmd org.apache.rocketmq.example.quickstart.Consumer
第一条命令用于创建一千条消息,创建完成后会自动停止,第二条命令用于消费消息,消费完成后不会自动停止。
退出服务
mqshutdown.cmd broker mqshutdown.cmd namesrv
到这里,安装步骤就已经完成了,官方文档中快速开始 | RocketMQ (apache.org)部分底部的Java代码就可以直接正常运行启动了。
控制台安装教程
我这里通过wsl系统中的docker安装RocketMq的后台页面,因为8080端口已经被上面教程中的proxy使用了,所以这里把端口号映射到18080。
docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.20.208.1:9876" -p 18080:8080 -t apacherocketmq/rocketmq-dashboard:latest
注意:可能有人会问为什么我docker中配置的NameServer服务地址不是127.0.0.1,因为该后台页面服务运行在docker容器内部,127.0.0.1是docker容器内部,而不是宿主机的IP,因为我NameServer是在宿主机上的,所以这里应该写宿主机的IP。
简述原理
首先我们启动NameServer服务器,类似于一个注册中心,NameServer本身可以支持集群模式,他们之间并无通信。
启动Broker,broker会向NameServer注册自身访问地址以及对应的Topic,NameServer会通过心跳维护所有可用的Broker。
生产者访问NameServer,通过指定Topic对应的Broker的访问地址,并像Broker发送Message
消费者访问NameServer,通过指定Topic获取对应的Broker的访问地址,消费Message
其他
服务启动后会在当前用户目录下自动创建一个store目录,如果是Windows,就是在C:\Users\{用户名}目录下。store目录中存放了消息数据,Topic信息。
我们进入config目录下,可以看见相关的配置。
我们打开topics.json文件,可以看见服务中所有的Topic信息,我们可以看见前面自己创建的两种不同类型的Topic。
"TestTopic":{
"attributes":{},
"order":false,
"perm":6,
"readQueueNums":8,
"topicFilterType":"SINGLE_TAG",
"topicName":"TestTopic",
"topicSysFlag":0,
"writeQueueNums":8
},
"DelayTopic":{
"attributes":{
"message.type":"DELAY"
},
"order":true,
"perm":6,
"readQueueNums":8,
"topicFilterType":"SINGLE_TAG",
"topicName":"DelayTopic",
"topicSysFlag":0,
"writeQueueNums":8
},
我们也可以通过直接修改该文件实现对Topic的添加和删除,只不过需要重启Broker服务。
评论区