ContOS7 安裝RocketMQ

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=PATH:JAVA_HOME/bin

image.png

6,退出文件,保存

按Esc鍵 輸入:wq 保存并退出

7,讓配置文件生效

命令:[root@localhost jdk]# source /etc/profile

8,查看是否配置成功

命令:java -version

因為我前面沒有卸載原有的JDK,所以這里還是顯示的原JDK版本號

三,切換JDK

  1. 查看當(dāng)前系統(tǒng)內(nèi)有幾個可用的Java

命令:alternatives --config java

想要我們新安裝的1.8能夠顯示出來,還需要再做處理

  1. 添加已安裝的jdk1.8

命令: alternatives --install <鏈接> <名稱> <路徑> <優(yōu)先度>

alternatives --install /usr/bin/java java /root/soft/jdk1.8.0_131/bin/java 2

  1. 選擇要使用的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

  1. 啟動NameServer

    # 1.啟動NameServer 
    mqnamesrv 
    后臺啟動:`nohup sh mqnamesrv &`
    # 2.查看啟動日志 
    tail -f ~/logs/rocketmqlogs/namesrv.log
    # 3.停止服務(wù)
    sh mqshutdown namesrv
    
  1. 啟動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
    
  2. 查看啟動

[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
  1. 消息發(fā)送測試

    1. 先啟動消費者

      export NAMESRV_ADDR=localhost:9876 && sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
      
  1. 再啟動生產(chǎn)者

    export NAMESRV_ADDR=localhost:9876 && sh tools.sh org.apache.rocketmq.example.quickstart.Producer
    

    可以看到生產(chǎn)者發(fā)送了很多消息,消費者在幾秒之后也受到了消息。

rocketmq可以外網(wǎng)訪問

  1. 修改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
  1. 啟動配置

    # 啟動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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容