第七步:linux下maven、RocketMQ的安装
下载和构建
1. 安装maven http://mirror.bit.edu.cn/apache/maven/
下载:wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压:tar -zxvf apache-maven-3.6.3-bin.tar.gz
配置环境变量:
在/etc/profile最后添加
JAVA_HOME=/soft/jdk1.8.0_111
MAVEN_HOME=/soft/maven/apache-maven-3.6.3
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export MAVEN_PATH=${MAVEN_HOME}/bin
export PATH=$PATH:${JAVA_PATH}:${MAVEN_PATH}
export rocketmq=/soft/RocketMQ/rocketmq-rocketmq-all-4.7.0/distribution/target/apache-rocketmq
使变量生效. /etc/profile
查看maven 是否安装成功:mvn -v 能正常看见版本号表示成功。
在执行最后一步的时候会去maven下载相关文件,*网址下载比较慢。可以使用maven的国内镜像
修改maven的setting.xml文件
1 2 |
|
setting.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/path/to/local/repo</localRepository>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>
2.安装 rocketmq
从 https://archive.apache.org/dist/rocketmq/4.7.0/rocketmq-all-4.7.0-source-release.zip下载 4.7.0 的源码版本,执行以下命令来解压4.7.0源码版本并构建二进制文件。
unzip rocketmq-all-4.7.0-source-release.zip
cd rocketmq-all-4.7.0/
mvn -Prelease-all -DskipTests clean install -U
构建成功
linux下RocketMQ的安装
由于可能会提示内存不足
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
调整一下 /soft/RocketMQ/rocketmq-all-4.7.0/distribution/target/apache-rocketmq/bin目录下的
runbroker.sh 和 runserver.sh的参数
vi runbroker.sh/
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=256m"
vi runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
进入到bin目录 :cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/bin
这里需要构建一个存放log的目录 ./rocketmqlogs
启动nameserver
nohup sh mqnamesrv >./rocketmqlogs/mqnamesrv.log 2>&1&
启动broker
nohup sh mqbroker -n localhost:9876 >./rocketmqlogs/broker.log 2>&1&
按照模版启动,模版的新建在文章最后,可以解决api连不上的问题
nohup sh mqbroker -c broker.p -n localhost:9876>./rocketmqlogs/broker.log 2>&1&
[aaa@qq.com conf]# netstat -ano |grep 9876
tcp6 0 0 :::9876 :::* LISTEN off (0.00/0/0)
看见端口在监听中说明执行成功了。
出现这样就是成功
二.RocketMQ的基本操作
(1)启动Name Server
-
1.cd /usr/local/rocketmq
-
2.nohup sh bin/mqnamesrv &
可通过 tail -f ~/logs/rocketmqlogs/namesrv.log或jps来查看nameserver是否启动成功
nohup sh bin/mqbroker -n localhost:9876 &
可通过 tail -f ~/logs/rocketmqlogs/broker.log或jps来查看nameserver是否启动成功
- 启动broker常见的问题之一:因为内存限制,无法启动
解决方案:修改bin/runserver.sh和bin/runbroker.sh中的内存参数设置
第一步:修改runserver.sh中的JVM参数:
原参数值:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
修改后的参数值:
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"
注:根据服务器配置自行设置
第二步:修改runborker.sh中的JVM参数
原参数值:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
修改后的参数值:
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m"
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
#!/usr/bin/env bash
#
# rocketmq - this script starts and stops the rocketmq daemon
#
# chkconfig: - 85 15
ROCKETMQ_HOME=/usr/local/rocketmq
ROCKETMQ_BIN=${ROCKETMQ_HOME}/bin
ADDR=`hostname -i`:9876
LOG_DIR=${ROCKETMQ_HOME}/logs
NAMESERVER_LOG=${LOG_DIR}/namesrv.log
BROKER_LOG=${LOG_DIR}/broker.log
start() {
if [ ! -d ${LOG_DIR} ];then
mkdir ${LOG_DIR}
fi
cd ${ROCKETMQ_HOME}
nohup sh bin/mqnamesrv > ${NAMESERVER_LOG} 2>&1 &
echo -n "The Name Server boot success..."
nohup sh bin/mqbroker -n ${ADDR} > ${BROKER_LOG} 2>&1 &
echo -n "The broker[%s, ${ADDR}] boot success..."
}
stop() {
cd ${ROCKETMQ_HOME}
sh bin/mqshutdown broker
sleep 1
sh bin/mqshutdown namesrv
}
restart() {
stop
sleep 5
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 2
esac
注:
- 重启操作中,休眠5秒是为了等待服务的关闭,服务未关闭将无法重新启动服务(本人做过实验,当休眠时间为3秒时,可能还未完全停止服务)
chmod a+x rocketmq.sh
sudo mv rocketmq.sh /etc/init.d/rocketmq
chkconfig --add rocketmq
chkconfig rocketmq on
启动:service rocketmq start
关闭:service rocketmq stop
重启:service rocketmq restart
1.基他操作
发送和接收消息
在发送/接收消息之前,我们需要告诉客户名称服务器的位置。RocketMQ 提供了多种方法来实现这一点。为了简单起见,我们使用环境变量NAMESRV_ADDR
发送消息:
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
关闭服务器
sh bin/mqshutdown broker //停止 broker
sh bin/mqshutdown namesrv //停止 nameserver
几个常用的命令
上面几个启动和关闭 name server 和 broker 的就不再说了,
查看集群情况 ./mqadmin clusterList -n 127.0.0.1:9876
查看 broker 状态 ./mqadmin brokerStatus -n 127.0.0.1:9876 -b 172.20.1.138:10911 (注意换成你的 broker 地址)
查看 topic 列表 ./mqadmin topicList -n 127.0.0.1:9876
查看 topic 状态 ./mqadmin topicStatus -n 127.0.0.1:9876 -t MyTopic (换成你想查询的 topic)
查看 topic 路由 ./mqadmin topicRoute -n 127.0.0.1:9876 -t MyTopic
===================================================================
安装web可视化客户端
1.下载文件(/usr/local目录下)
https://github.com/apache/rocketmq-externals 地址下载并从本地上传到服务器
2.解压(/usr/local目录下)
yum install -y unzip zip 前提是:unzip解压文件无法使用
unzip rocketmq-externals-master.zip 解压文件
3.修改配置文件(usr/local/rocketmq-externals-master/目录下)
find -name application.properties 可以查看到两个文件都在rocketmq-console文件目录下
vim application.properties
rocketmq.config.namesrvAddr=192.168.143.128:9876(ip1:port;ip2:port)
4.编译(usr/local/rocketmq-externals-master/rocketmq-console/目录下)
mvn clean package -Dmaven.test.skip=true 如果失败多编译几次--可能是网络问题
linux下RocketMQ的安装
编译成功后,在rocketmq-console目录下会生成一个目录:target目录,该目录下有启动rocketmq界面的jar文件
5.启动web(usr/local/rocketmq-externals-master/rocketmq-console/target目录下)
java -jar rocketmq-console-ng-1.0.0.jar 启动 ---当终端断了该服务就会停止
nohup java -jar rocketmq-console-ng-1.0.0.jar >>/soft/RocketMQ/rocketmqlogs/log.out 2>&1 &
后台启动 --当终端断了也不会停止服务
说明启动成功
linux下RocketMQ的安装
==================================================================
用java代码实现API的过程中需要注意的几个问题
1、出现connect to 172.17.42.1:10909 failed
原因分析:我第一次使用的是rocketmq-client-3.4.6,第二次使用的是rocketmq-client-3.5.7,都出现了这个问题。但是原来使用rocketmq-client-3.2.5却不会出现这个问题。
(1)目前这种写法Rocket默认开启了VIP通道,VIP通道端口为10911-2=10909。若Rocket服务器未启动端口10909,则报connect to <:10909> failed。
(2)解决方式:增加一行代码producer.setVipChannelEnabled(false);
linux下RocketMQ的安装
2、出现connect to 172.17.42.1:10911 failed
还是外网内网ip的问题
最后经过多方搜索,在官方的用户说明里看到下面的方法
在bin目录下面配置模版
linux下RocketMQ的安装
修改后的broker.p文件
namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.143.128
brokerName=localhost
brokerClusterName=DefaultCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
commitIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true
transientStorePoolEnable=false
启动broker的时候用规定的模版文件nohup sh mqbroker -c broker.p -n localhost:9876 /soft/RocketMQ/rocketmqlogs/broker.log