侧边栏壁纸
博主头像
樯哥的技术分享网博主等级

学无止境,学以致用,志存高远。

  • 累计撰写 17 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Windows中快速安装启动RocketMq环境

随心
2023-06-21 / 0 评论 / 0 点赞 / 129 阅读 / 6045 字

网上关于RocketMq的文章特别多,唯独关于在Windows系统上安装的教程特别少,就连官网也是基于Linux命令来启动的。可能很多人会说把Linux的执行程序换成Windows的cmd程序就行了,此方法在大部分情况下是可以的,唯独RocketMq是个例外。

官方文档中提到,RocketMq提供了一种新的gRPC 协议,该协议必须使用RocketMq5的版本,并且启用proxy模式,当然,你也可以使用老版本的Remoting协议,而这两种协议决定了你开发过程中使用到的sdk不同,官方推荐使用新的gRPC协议,因此,必须按照他的要求启动RocketMq才能正常连接使用。

本文将讲解如何在Windows上快速启动一个RocketMq,并且启用proxy模式,方便本地开发时使用。

安装教程

  1. 下载安装

    具体的下载过程可以参考官方文档。下载完毕后,解压,配置ROCKETMQ_HOME环境变量。

    此外,还要配置jdk环境变量,注意要配置JDK8,官方虽然说要求JDK8+,但是亲测jdk17启动会有问题,应该是启动脚本的原因。

  2. 启动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.表示启动成功。

  3. 在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"
    )
  4. 启动刚才创建的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

  5. 创建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
  6. 使用tools.cmd创建并消费消息

    首先在系统变量中指定NameServer地址:

    然后在bin目录下执行脚本:

    start tools.cmd org.apache.rocketmq.example.quickstart.Producer
    start tools.cmd org.apache.rocketmq.example.quickstart.Consumer

    第一条命令用于创建一千条消息,创建完成后会自动停止,第二条命令用于消费消息,消费完成后不会自动停止。

  7. 退出服务

    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。

简述原理

  1. 首先我们启动NameServer服务器,类似于一个注册中心,NameServer本身可以支持集群模式,他们之间并无通信。

  2. 启动Broker,broker会向NameServer注册自身访问地址以及对应的Topic,NameServer会通过心跳维护所有可用的Broker。

  3. 生产者访问NameServer,通过指定Topic对应的Broker的访问地址,并像Broker发送Message

  4. 消费者访问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服务。

0

评论区