摘要:
由于公司需要部署Rocket测试环境,但是公司虚拟机和公司的开发网络不在一个局域网。就想部署一个外网能够进行测试的RocketMQ环境。
部署:
参考官网:
https://rocketmq.apache.org/docs/quick-start/
rocketMQ下载地址(4.2版本):
https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
安装步骤:
#解压
unzip -o rocketmq-all-4.2.0-source-release.zip
# 切入到rocketmq文件夹
cd rocketmq-all-4.2.0/
#mvn install
mvn -Prelease-all -DskipTests clean install -U
#建议进入bin目录进行执行命令
cd distribution/target/apache-rocketmq/bin
#启动 name server
#进入rocket命令目录
[root@node3 ~]# cd /home/rocketmq-all-4.2.0/distribution/target/apache-rocketmq/bin/
#启动namesrv
[root@node3 bin]# nohup sh mqnamesrv & tail -f ~/logs/rocketmqlogs/namesrv.log
server启动成功:
#启动broker
1、编写 broker.conf文件(命令编辑或者直接copy在本地编辑然后上传)
cd /home/rocketmq-all-4.2.0/distribution/conf
vim broker.conf
i
添加一下内容:
#InetAddress用于网络接口,如果是虚拟机则配置的是虚拟机的外网ip
brokerIP1=122.114.164.162
#监听端口 ,也是外网映射端口(这里需要注意的是,外网端口和内网的10911端口需要一直,否则会出现 timeout问题)
listenPort=10911
2、开放内网和外网的映射端口
内网 外网
9876 24314
10911 10911
10909 10909(这个是vip通道端口,如果不使用则不需要设置)
3、启动broker
[root@node3 bin]# nohup sh mqbroker -n 122.114.164.162:24314 -c /home/rocketmq-all-4.2.0/distribution/conf/broker.conf & tail -f ~/logs/rocketmqlogs/broker.log
broker启动成功:
注意:这里需要注意的是,映射10911端口的时候,外网端口和内网的10911端口需要一直,否则会出现 timeout问题,这好像是4.2版本的一个小bug
#测试
sh mqadmin sendMsgStatus -n 122.114.164.162:24314 -b broker-a -c 3
虚拟机测试成功:
#本地网络请求测试虚拟机
#pom.xml依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-store</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.2.0</version>
</dependency>
#测试代码:
public static void main(String[] args) throws Exception {
DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
producer.setNamesrvAddr("122.114.164.162:24314");
producer.setVipChannelEnabled(false);
producer.start();
for (int i = 0; i < 100; i++){
Message msg = new Message("TopicTest",
"TagA",
"OrderID188",
"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
}
producer.shutdown();
}
测试成功:
补充:
相关的操作命令:
#显示当前系统的进程
jps
# 查看对应进程id的详细信息
[root@node3 bin]# netstat -nap | grep 5896
# 查看文件
vim runserver.sh
# 编辑状态
i
#退出编辑
esc
#保存退出
:wq
#强制退出
:q!
#结束broker 和namesrv 服务
[root@node3 bin]# sh ./mqshutdown broker
[root@node3 bin]# sh ./mqshutdown namesrv
RocketMQ架构图: