RocketMQ:
RocketMQ是阿里開源的一款非常優秀中間件產品,脫胎於阿里的另一款隊列技術MetaQ,后捐贈給Apache基金會作為一款孵化技術,僅僅經歷了一年多的時間就成為Apache基金會的頂級項目。
RocketMQ:java語言實現,十萬級數據吞吐量,處理速度ms級,分布式架構,功能強大,擴展性強。
RocketMQ在Linux中安裝:
RocketMQ是基於java開發的,運行使用需要有JDK環境,所以首先要在Linux中安裝JDK(以JDK8為例)。
安裝與RocketMQ對應的JDK之前需要將Linux操作系統默認安裝的OpendJDK刪除:
# 查看 rpm -qa | grep java # 刪除(把上一個命令看到的所有的jdk文件 用 如下命令刪除) rpm -e --nodeps java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.232.b09-0.el7_7.x86_64 rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.241-2.6.20.0.el7_7.x86_64 rmp -e --nodeps java-1.7.0-openjdk-1.7.0.241-2.6.20.0.el7_7.x86_64 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.241-2.6.20.0.el7_7.x86_64
將默認安裝的OpenedJDK刪除后,導入JDK8的壓縮包:
#1,解壓 jdk tar -zxvf jdk-8u171-linux-x64.tar.gz #2,配置環境變量 vim /etc/profile export JAVA_HOME=/opt/jdk1.8.0_171 export PATH=$PATH:${JAVA_HOME}/bin #3,重新加載配置 source /etc/profile #4,查看jdk是否配置成功 java -version
JDK安裝並且配置完成后,導入對應的RocketMQ壓縮包:
#解壓縮即可 unzip rocketmq-all-4.5.2-bin-release.zip
RocketMQ啟動:
#步驟1:啟動命名服務器(bin目錄下) sh mqnamesrv #步驟2:啟動消息服務器(bin目錄下) sh mqbroker -n localhost:9876
運行rockmq時,若出現There is insufficient memory for the Java Runtime Environment,類似報錯信息需要修改bin目錄下的 runbroker.sh、runserver.sh、tools.sh文件內的配置信息即可:
#修改指令(在bin目錄下) vim runbroker.sh #將內存配置修改即可 JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g" #修改后 JAVA_OPT="${JAVA_OPT} -server -Xms256 -Xmx256 -Xmn128"
測試服務器環境:
#步驟1:配置命名服務器地址 export NAMESRV_ADDR=localhost:9876 #步驟2:啟動生產者程序客戶端(bin目錄下) sh tools.sh org.apache.rocketmq.example.quickstart.Producer #啟動后產生大量日志信息(注意該信息是測試程序中自帶的,不具有通用性,僅供學習查閱參考) #步驟3:啟動消費者程序客戶端(bin目錄下) sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
遠程調用時(代碼運行)出現RemotingTooMuchRequestException: sendDefaultImpl call timeou錯誤,需要在conf目錄下broker.conf文件中添加如下配置:
#配置自己Linux的ip brokerIP1 = 192.168.1.1
修改配置文件后,在mqbroker啟動時,指定配置文件啟動,例如:
#在bin目錄下-n ip -c 配置文件路徑 sh mqbroker -n 192.168.1.1:9876 -c ../conf/broker.conf
若還是報錯檢查防火牆是否關閉
# 關閉防火牆 systemctl stop firewalld.service # 查看防火牆的狀態 firewall-cmd --state # 禁止firewall開機啟動 systemctl disable firewalld.service