ContOS7安裝RocketMQ
JDK1.8 安裝
前言:
Linux系統(tǒng)安裝之后其實是自帶了jdk的,但我們需要配置為自己要用的jdk版本。
一,刪除原JDK
二,配置新JDK
三,切換JDK
正文:
一,刪除原JDK
1,查看系統(tǒng)的Java版本
命令:java -version
2,查看系統(tǒng)安裝的jdk
命令:rpm -qa | grep -i jdk
3,刪除之前的jdk
命令:rpm -e --nodeps jdk包名 (如:rpm -e --nodeps jdk-1.7.0_75-fcs.x86_64)
注:我的刪不掉,不知道為什么,不過不刪也沒事,之后切換到要用的版本就行了
二,配置新JDK
1,創(chuàng)建jdk安裝目錄
命令:[root@localhost ~]# mkdir -p /usr/local/src/jdk ([root@localhost ~]# 是為了讓大家注意命令執(zhí)行時所處的文件夾)
2,下載jdk包
方案一:
命令:[root@localhost jdk]# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
注意:如果上面wget命令不能用,報錯:-bash: wget: command not found。執(zhí)行一下該命令(安裝依賴包) yum -y install wget
注意 : 記住需要加上:--no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" 這段是為了避開用戶驗證用的
方案二:
在本機(jī)先把jdk文件下載好(在我的博客中搜索jdk可以查詢到下載步驟,linux用后綴為tar.gz的文件),然后用WinSCP(上一章有介紹)把jdk文件放到對應(yīng)目錄下
jdk下載路徑:鏈接:https://pan.baidu.com/s/1xJ2r4TWqWup_HHKk0wepmg 提取碼:zb15
3,解壓jdk包
命令:[root@localhost jdk]# tar -zxvf jdk-8u212-linux-x64.tar.gz (文件名可以輸入一部分后按tab鍵自動補(bǔ)全)
4,自定義文件夾名稱
命令:[root@localhost jdk]# mv jdk1.8.0_131 jdk1.8
其實可以直接在WinSCP下改,也可以解壓改名后再放過來,但我沒有嘗試
5,配置環(huán)境變量
命令:[root@localhost bin]# vi /etc/profile (可以看到這個文件的內(nèi)容,profile文件有點類似于windows系統(tǒng)里面的環(huán)境變量的配置)
shift + g 定位到最后一行
這個時候按一下a或i鍵,進(jìn)入編輯模式
需要配置的內(nèi)容:
export JAVA_HOME=/root/soft/jdk1.8.0_131
export PATH=JAVA_HOME/bin
6,退出文件,保存
按Esc鍵 輸入:wq 保存并退出
7,讓配置文件生效
命令:[root@localhost jdk]# source /etc/profile
8,查看是否配置成功
命令:java -version
因為我前面沒有卸載原有的JDK,所以這里還是顯示的原JDK版本號
三,切換JDK
- 查看當(dāng)前系統(tǒng)內(nèi)有幾個可用的Java
命令:alternatives --config java
想要我們新安裝的1.8能夠顯示出來,還需要再做處理
- 添加已安裝的jdk1.8
命令: alternatives --install <鏈接> <名稱> <路徑> <優(yōu)先度>
alternatives --install /usr/bin/java java /root/soft/jdk1.8.0_131/bin/java 2
-
選擇要使用的jdk
命令:alternatives --config java
要選擇哪個,就輸入哪個編號,回車就行(比如我需要1.8,就是輸入2,回車)
java -version 查看是否配置成功
安裝RocketMQ
參考官網(wǎng)
http://rocketmq.apache.org/docs/quick-start/
下載軟件包
wget https://archive.apache.org/dist/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
unzip rocketmq-all-4.7.1-bin-release.zip
啟動異常處理:
[root@localhost bin]# ./mqbroker -n localhost:9876
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /root/soft/rocketmq-all-4.7.1-bin-release/bin/hs_err_pid13941.log
# 原因:rocketmq默認(rèn)的使用內(nèi)存4G,虛擬機(jī)內(nèi)存不足
# 解決:將以下sh腳本添加到文件中,關(guān)于jvm內(nèi)存參數(shù)調(diào)整到系統(tǒng)內(nèi)存容序的參數(shù)值
[root@localhost bin]# vim runbroker.sh
[root@localhost bin]# vim runserver.sh
[root@localhost bin]# vim tools.sh
例如:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
操作命令
cd rocketmq-all-4.7.1-bin-release/bin
-
啟動NameServer
# 1.啟動NameServer mqnamesrv 后臺啟動:`nohup sh mqnamesrv &` # 2.查看啟動日志 tail -f ~/logs/rocketmqlogs/namesrv.log # 3.停止服務(wù) sh mqshutdown namesrv
-
啟動Broker
# 1.啟動Broker mqbroker -n localhost:9876 后臺啟動:`nohup sh mqbroker -n localhost:9876 &` # 2.查看啟動日志 tail -f ~/logs/rocketmqlogs/broker.log # 3.停止服務(wù) sh mqshutdown broker
-
查看啟動
[root@localhost bin]# jps
43427 Jps
34423 BrokerStartup
33739 NamesrvStartup
4. 關(guān)閉服務(wù)
~~~shell
[root@localhost bin]# sh mqshutdown broker
The mqbroker(34423) is running...
Send shutdown request to mqbroker(34423) OK
[root@localhost bin]# sh mqshutdown namesrv
The mqnamesrv(33739) is running...
Send shutdown request to mqnamesrv(33739) OK
創(chuàng)建主題topic
sh mqadmin updateTopic -b 127.0.0.1:10911 -t TopicA
創(chuàng)建消費組
sh mqadmin updateSubGroup -b 127.0.0.1:10911 -g SubGroupA
-
消息發(fā)送測試
-
先啟動消費者
export NAMESRV_ADDR=localhost:9876 && sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
-
-
再啟動生產(chǎn)者
export NAMESRV_ADDR=localhost:9876 && sh tools.sh org.apache.rocketmq.example.quickstart.Producer
可以看到生產(chǎn)者發(fā)送了很多消息,消費者在幾秒之后也受到了消息。
rocketmq可以外網(wǎng)訪問
-
修改broker配置
cd rocketmq-all-4.7.1-bin-release/bin
sh mqshutdown broker
sh mqbroker -m >broker.p
vim broker.p
修改里面的IP地址如下
namesrvAddr=192.168.142.128:9876
brokerIP1=192.168.142.128
brokerName=localhost
brokerClusterName=DefaultCluster
[root@localhost bin]# cat broker.c
namesrvAddr=192.168.142.128:9876
brokerIP1=192.168.142.128
brokerName=localhost.localdomain
brokerClusterName=DefaultCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
msgTraceTopicName=RMQ_SYS_TRACE_TOPIC
traceTopicEnable=false
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
transactionTimeOut=6000
transactionCheckMax=15
transactionCheckInterval=60000
aclEnable=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=500
commitIntervalCommitLog=200
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
-
啟動配置
# 啟動namesrv nohup sh mqnamesrv & # 啟動broker nohup sh mqbroker -c broker.p autoCreateTopicEnable=true &
實例代碼
生產(chǎn)者
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("192.168.142.128:9876");
producer.start();
for (int i = 1000; i < 2000; i++) {
try {
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
} catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
producer.shutdown();
}
}
消費者
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");
consumer.setNamesrvAddr("192.168.142.128:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.subscribe("TopicTest", "*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.printf(Thread.currentThread().getName() + " Receive New Messages: " + msgs + "%n");
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.printf("Consumer Started.%n");
}
}
問題處理
MQClientException: No route info of this topic, TopicTest
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &
RocketMQ—connect to 192.168.xxx.xxx:9876 failed
1.相互之間ping一下看看能不能通;
2.ping一下外網(wǎng)看看能不能通(一般使用橋接模式);
如果上述兩個都通,那說明網(wǎng)絡(luò)上應(yīng)該是沒什么問題的.
3.看看后臺進(jìn)程中是否有開啟相應(yīng)的服務(wù),如果有9876端口,那就說明是正常的
netstat -ntlp
4.相互之間telnet一下
telnet 192.168.142.128 9876
如果未安裝telnet,可以通過如下命令進(jìn)行安裝:
yum list telnet* 查看telnet相關(guān)的安裝包
yum install telnet-server 安裝telnet服務(wù)
yum install telnet.* 安裝telnet客戶端
一般情況出現(xiàn)上述錯誤這邊telnet應(yīng)該是不通的,原因是防火墻開著,我們需要將防火墻關(guān)閉.
1.firewall防火墻
(1)首先查看防火墻的狀態(tài)
systemctl status firewalld
(2)如果防火墻開著,那么將其關(guān)閉
systemctl stop firewalld
systemctl disable firewalld #禁止firewall開機(jī)啟動
2.iptables防火墻
這個很容易被忽視,或者是一不小心被打開,步驟依然如上
(1)先查看其狀態(tài)
service iptables status
(2)如果開著將其關(guān)閉
service iptables stop --臨時關(guān)閉防火墻
chkconfig iptables off --永久關(guān)閉防火墻
尊重原創(chuàng)
參考地址:
https://blog.csdn.net/kkgbn/article/details/78255471
https://blog.csdn.net/gwd1154978352/article/details/80785530