RocketMQ的安裝(單節(jié)點)
接下來,我們從無到有 ,搭建一個RocketMQ的環(huán)境吧,單節(jié)點走起 。
安裝虛擬機(optional)
假如你沒有云主機也沒搭建本地虛擬機,那么推薦使用VMware Workstation Player 來搭建自己的虛機,Virtual Box 也不錯,這兩款體積都比較小,適合個人開發(fā)。
VMware Workstation 15.5 Player的安裝,請移步: VMware-使用 VMware Workstation 15.5 Player 替換 VMware Workstation Pro
安裝的時候,把網(wǎng)絡提前啟用,省去了后面的配置

JDK 和 RocketMQ
RocketMQ 是個純java、分布式、隊列模型的開源消息中間件,所以JDK必不可少了。
RocketMQ 版本及JDK的對應關系
RocketMQ 版本及JDK的對應關系 : 戳這里

版本選擇
JDK版-1.8.0_221
RocketMQ版本:4.3.2 release

下載Binary 二進制版本的即可,安裝方便。
JDK1.8.0_221 安裝
JDK(rpm)安裝: 戳這里 【rpm安裝后,默認安裝路徑為/usr/java】
JDK (tar.gz) 安裝: 戳這里
RocketMQ- 安裝 、配置、啟動、關閉
RocketMQ- 安裝
解壓zip包到指定目錄
約定下安裝目錄: /usr/local/rocketmq ,沒有的目錄自行創(chuàng)建 。
將下載好的 rocketmq-all-4.3.2-bin-release.zip 使用unzip命令,解壓到 /usr/local/rocketmq目錄下 如下所示
[root@artisan rocketmq]# pwd
/usr/local/rocketmq
[root@artisan rocketmq]# ll
total 0
drwxr-xr-x. 6 root root 96 Nov 3 19:10 rocketmq-all-4.3.2-bin-release
環(huán)境變量設置
修改 /etc/profile ,檢查jdk與rocketmq的環(huán)境變量是否配置 (這里配置的是全局變量,對所有用戶生效,可以不在這里配置,在應用的腳本里設置也是可以的,這里為了方便后續(xù)的操作,添加到全局變量中)
在/etc/profile 末尾增加如下內(nèi)容(根據(jù)自己下載的軟件信息和安裝目錄配置)
# JDK
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
#rocketmq
export ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.3.2-bin-release
export PATH=$ROCKETMQ_HOME/bin:$PATH
第二步: 刷新環(huán)境變量
source /etc/profile
看下是否生效了
[root@artisan ~]# echo $JAVA_HOME
/usr/java/jdk1.8.0_221-amd6
[root@artisan ~]# echo $ROCKETMQ_HOME
/usr/local/rocketmq/rocketmq-all-4.3.2-bin-release
[root@artisan ~]#
OK,生效,與配置相同。
RocketMQ-配置
修改配置文件 broker.conf
位于$ROCKETMQ_HOME/conf目錄下 ,啟動的時候可以通過-c參數(shù)加載該配置文件
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#集群名稱,可自定義
brokerClusterName=DefaultCluster
brokerName=broker‐a
brokerId=0
#rocketmq‐name服務地址,多個地址用;分開,不配置默認為localhost:9876
namesrvAddr=192.168.18.130:9876
deleteWhen=04
fileReservedTime=48
#主從角色SYNC_MASTER,ASYNC_MASTER,SLAV
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
##允許自動創(chuàng)建主題topi
autoCreateTopicEnable=true
#broker監(jiān)聽端口
listenPort=10911
#消息存儲根路徑
storePathRootDir=/data/rocketmq/store
#日志路徑
storePathCommitLog=/data/rocketmq/store/commitlog
配置說明:
1.namesrvAddr : NameServer地址,可以配置多個,用逗號分隔;
2.brokerClusterName 所屬集群名稱,如果節(jié)點較多可以配置多個
3.brokerName broker名稱,master和slave使用相同的名稱,表明他們的主從關系
4.brokerId 0表示Master,大于0表示不同的slave
5.deleteWhen 表示幾點做消息刪除動作,默認是凌晨4點
6.fileReservedTime 在磁盤上保留消息的時長,單位是小
7.brokerRole 有三個值:【SYNC_MASTER,ASYNC_MASTER,SLAVE】;同步和異步表示Master和Slave之間同步數(shù)據(jù)的機制;
8.flushDiskTyp 刷盤策略,取值為:【ASYNC_FLUSH,SYNC_FLUSH】表示同步刷盤和異步刷盤;SYNC_FLUSH消息寫入磁盤后才返回成功狀態(tài),ASYNC_FLUSH不需要;
9.listenPort 啟動監(jiān)聽的端口號
10.storePathRootDir 存儲消息的根目錄
11.storePathCommitLog 默認路徑${user.home} \store\${commitlog}\${fileName}
jvm 內(nèi)存設置(optional)
RocketMQ 默認給的jvm配置是很大的,我這里使用了虛擬機,分配的內(nèi)存只有1G,所以需要將內(nèi)存設置的小一些,否則無法啟動。
修改 $ROCKETMQ_HOME/bin/runserver.sh 和$ROCKETMQ_HOME/bin/runbroker.sh中JAVA_OPT關于內(nèi)存的設置
runserver.sh
[root@artisan bin]# cat -n runserver.sh
1 #!/bin/sh
2
3 # Licensed to the Apache Software Foundation (ASF) under one or more
4 # contributor license agreements. See the NOTICE file distributed with
5 # this work for additional information regarding copyright ownership.
6 # The ASF licenses this file to You under the Apache License, Version 2.0
7 # (the "License"); you may not use this file except in compliance with
8 # the License. You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17
18 #===========================================================================================
19 # Java Environment Setting
20 #===========================================================================================
21 error_exit ()
22 {
23 echo "ERROR: $1 !!"
24 exit 1
25 }
26
27 [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
28 [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
29 [ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
30
31 export JAVA_HOME
32 export JAVA="$JAVA_HOME/bin/java"
33 export BASE_DIR=$(dirname $0)/..
34 export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
35
36 #===========================================================================================
37 # JVM Configuration 修改此處的內(nèi)存大小,默認為4g,一般我們的虛擬機內(nèi)存都設置的比較小 , 根據(jù)自己機器的配置合理設置
38 #===========================================================================================
39 JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=64m"
40 JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
41 JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
42 JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
43 JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
44 JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
45 #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
46 JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
47 JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
48
49 $JAVA ${JAVA_OPT} $@
[root@artisan bin]#
runbroker.sh
[root@artisan bin]# cat -n runbroker.sh
1 #!/bin/sh
2
3 # Licensed to the Apache Software Foundation (ASF) under one or more
4 # contributor license agreements. See the NOTICE file distributed with
5 # this work for additional information regarding copyright ownership.
6 # The ASF licenses this file to You under the Apache License, Version 2.0
7 # (the "License"); you may not use this file except in compliance with
8 # the License. You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17
18 #===========================================================================================
19 # Java Environment Setting
20 #===========================================================================================
21 error_exit ()
22 {
23 echo "ERROR: $1 !!"
24 exit 1
25 }
26
27 [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
28 [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
29 [ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
30
31 export JAVA_HOME
32 export JAVA="$JAVA_HOME/bin/java"
33 export BASE_DIR=$(dirname $0)/..
34 export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
35
36 #===========================================================================================
37 # JVM Configuration 默認需要內(nèi)存大小為8g 根據(jù)自己機器的配置合理設置
38 #===========================================================================================
39 JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
40 JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
41 JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
42 JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
43 JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
44 JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
45 JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
46 JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
47 JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
48 #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
49 JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
50 JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
51
52 numactl --interleave=all pwd > /dev/null 2>&1
53 if [ $? -eq 0 ]
54 then
55 if [ -z "$RMQ_NUMA_NODE" ] ; then
56 numactl --interleave=all $JAVA ${JAVA_OPT} $@
57 else
58 numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@
59 fi
60 else
61 $JAVA ${JAVA_OPT} $@
62 fi
[root@artisan bin]#
修改配置文件 broker.conf,配置brokerIP
位于$ROCKETMQ_HOME/conf目錄下
指定broker的ip為主網(wǎng)卡的地址
brokerIP1=192.168.18.130
RocketMQ-啟動namesrv
先啟動namesrv ,然后啟動broker
在$ROCKETMQ_HOME/bin下執(zhí)行 nohup ./mqnamesrv -n 192.168.18.130:9876&
[root@artisan bin]# pwd
/usr/local/rocketmq/rocketmq-all-4.3.2-bin-release/bin
[root@artisan bin]# nohup ./mqnamesrv -n 192.168.18.130:9876&
[1] 15588
[root@artisan bin]# nohup: ignoring input and appending output to ‘nohup.out’
tail -f nohup.out
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON
[root@artisan bin]# jps 查看啟動的java進程
15591 NamesrvStartup
20968 Jps
[root@artisan bin]#
RocketMQ-啟動broker
先啟動namesrv ,然后啟動broker
不指定啟動配置文件
在$ROCKETMQ_HOME/bin下執(zhí)行
[root@artisan bin]#nohup sh ./mqbroker ‐n 192.168.18.130:9876 autoCreateTopicEnable=true&
指定啟動配置配置文件
-c 參數(shù) 加載配置文件
在$ROCKETMQ_HOME/bin下執(zhí)行 nohup ./mqbroker -n 192.168.18.130:9876 -c ../conf/broker.conf autoCreateTopicEnable=true &
192.168.18.130:9876為nameserver,broker要注冊到該namesrv 注冊中心
autoCreateTopicEnable=true(允許創(chuàng)建topic),如果broker.conf配置了autoCreateTopicEnable=true,啟動命令中可以省略
[root@artisan bin]# pwd
/usr/local/rocketmq/rocketmq-all-4.3.2-bin-release/bin
[root@artisan bin]# nohup ./mqbroker -n 192.168.18.130:9876 -c ../conf/broker.conf autoCreateTopicEnable=true &
[2] 21072
[root@artisan bin]# nohup: ignoring input and appending output to ‘nohup.out’
tail -f nohup.out
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON
The broker[brokeraa, 192.168.18.130:10911] boot success. serializeType=JSON and name server is 192.168.18.130:9876
^C
[root@artisan bin]# jps 查看啟動的java進程
21076 BrokerStartup
15591 NamesrvStartup
21160 Jps
[root@artisan bin]#
查看broker啟動配置
在$ROCKETMQ_HOME/bin下執(zhí)行 ./mqbroker -m
[root@artisan bin]# pwd
/usr/local/rocketmq/rocketmq-all-4.3.2-bin-release/bin
[root@artisan bin]# ./mqbroker -m
2019-11-03 21\:29\:28 INFO main - namesrvAddr=
2019-11-03 21\:29\:28 INFO main - brokerIP1=192.168.18.130
2019-11-03 21\:29\:28 INFO main - brokerName=artisan
2019-11-03 21\:29\:28 INFO main - brokerClusterName=DefaultCluster
2019-11-03 21\:29\:28 INFO main - brokerId=0
2019-11-03 21\:29\:28 INFO main - autoCreateTopicEnable=true
2019-11-03 21\:29\:28 INFO main - autoCreateSubscriptionGroup=true
2019-11-03 21\:29\:28 INFO main - rejectTransactionMessage=false
2019-11-03 21\:29\:28 INFO main - fetchNamesrvAddrByAddressServer=false
2019-11-03 21\:29\:28 INFO main - transactionTimeOut=6000
2019-11-03 21\:29\:28 INFO main - transactionCheckMax=15
2019-11-03 21\:29\:28 INFO main - transactionCheckInterval=60000
2019-11-03 21\:29\:28 INFO main - storePathRootDir=/root/store
2019-11-03 21\:29\:28 INFO main - storePathCommitLog=/root/store/commitlog
2019-11-03 21\:29\:28 INFO main - flushIntervalCommitLog=500
2019-11-03 21\:29\:28 INFO main - commitIntervalCommitLog=200
2019-11-03 21\:29\:28 INFO main - flushCommitLogTimed=false
2019-11-03 21\:29\:28 INFO main - deleteWhen=04
2019-11-03 21\:29\:28 INFO main - fileReservedTime=72
2019-11-03 21\:29\:28 INFO main - maxTransferBytesOnMessageInMemory=262144
2019-11-03 21\:29\:28 INFO main - maxTransferCountOnMessageInMemory=32
2019-11-03 21\:29\:28 INFO main - maxTransferBytesOnMessageInDisk=65536
2019-11-03 21\:29\:28 INFO main - maxTransferCountOnMessageInDisk=8
2019-11-03 21\:29\:28 INFO main - accessMessageInMemoryMaxRatio=40
2019-11-03 21\:29\:28 INFO main - messageIndexEnable=true
2019-11-03 21\:29\:28 INFO main - messageIndexSafe=false
2019-11-03 21\:29\:28 INFO main - haMasterAddress=
2019-11-03 21\:29\:28 INFO main - brokerRole=ASYNC_MASTER
2019-11-03 21\:29\:28 INFO main - flushDiskType=ASYNC_FLUSH
2019-11-03 21\:29\:28 INFO main - cleanFileForciblyEnable=true
2019-11-03 21\:29\:28 INFO main - transientStorePoolEnable=false
[root@artisan bin]#
關閉命令
先關閉 broker ,然后關閉 namesrv
正常退出 (推薦)
在$ROCKETMQ_HOME/bin 調(diào)用mqshutdown 腳本執(zhí)行
./mqshutdown broker 關閉broker
./mqshutdown namesrv 關閉namesrv
[root@artisan bin]# pwd
/usr/local/rocketmq/rocketmq-all-4.3.2-bin-release/bin
[root@artisan bin]# ./mqshutdown broker
The mqbroker(21076) is running...
Send shutdown request to mqbroker(21076) OK
[root@artisan bin]# ./mqshutdown namesrv
The mqnamesrv(15591) is running...
Send shutdown request to mqnamesrv(15591) OK
[root@artisan bin]#
[1]- Exit 143 nohup ./mqnamesrv -n 192.168.18.130:9876
[2]+ Exit 143 nohup ./mqbroker -n 192.168.18.130:9876 -c ../conf/broker.conf autoCreateTopicEnable=true
[root@artisan bin]#
[root@artisan bin]# jps
22471 Jps
[root@artisan bin]#
kill進程
ps ‐ef|grep rocketmq 查看pid(進程號)
kill ‐9 pid(進程號)
關閉防火墻
自己搭建的測試環(huán)境,防火墻關閉即可。生產(chǎn)環(huán)境考慮通過開放端口訪問限制
如果客戶端訪出現(xiàn) RemotingTooMuchRequestException: sendDefaultImpl call timeout
在客戶端運行Producer時,可能會出現(xiàn)如上異常,這是因為從 Windows 上開發(fā)連接
虛擬機中的 nameServer 時要經(jīng)過 Linux 系統(tǒng)的防火墻,而防火墻一般都會有超時的機制,在網(wǎng)絡連接長時間不傳輸數(shù)據(jù)時,會關閉這個 TCP 的會話,關閉后再讀寫,就有可能導致這個異常。
centos7命令如下:
[root@artisan ~]# 關閉防火
[root@artisan ~]# systemctl stop firewalld.service
[root@artisan ~]# 禁止開機啟
[root@artisan ~]# systemctl disable firewalld.service
[root@artisan ~]# 查看狀
[root@artisan ~]# systemctl status firewalld.service 查看狀態(tài)
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Nov 03 18:21:39 artisan systemd[1]: Starting firewalld - dynamic firewall daemon...
Nov 03 18:21:42 artisan systemd[1]: Started firewalld - dynamic firewall daemon.
Nov 03 18:21:42 artisan firewalld[896]: 2019-11-03 18:21:42 ERROR: Failed to create temporary file: [Errno 13] Permission denied: '/run/firewalld'
Nov 03 19:37:39 artisan systemd[1]: Stopping firewalld - dynamic firewall daemon...
Nov 03 19:37:39 artisan systemd[1]: Stopped firewalld - dynamic firewall daemon.
[root@artisan ~]# 查看狀態(tài)
[root@artisan ~]# firewall-cmd --state
not running
[root@artisan ~]#
關于autoCreateTopicEnable參數(shù)
autoCreateTopicEnable=true,是不是需要在啟動的時候開啟這個功能,一般情況都是設計階段定好系統(tǒng)有幾個queue, 系統(tǒng)上線前,由運維來創(chuàng)建。 我們這里測試用,為了防止報錯,故設置為true ,自動創(chuàng)建Topic
遇到的問題
- Vmware Player 虛擬機啟動 PXE-E53:No boot filename received \ Operating System not found

ANSWER:
檢查虛擬機的設置, 勾選啟動時連接
剛用VMware Workstation 15.5 Player 替換 了VMware Workstation Pro , 結果Player 沒勾選這個選項,所以從磁盤加載ISO的時候找不到。。。

原文鏈接:https://blog.csdn.net/yangshangwei/article/details/102878646