RocketMQ安裝與實例


一、RocketMQ安裝(單機)

  1、RocketMQ下載 :Apache 官方下載網址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.0/rocketmq-all-4.3.0-source-release.zip

            或者GitHub 官方下載網址:https://github.com/apache/rocketmq

  2、將下載RocketMQ上傳至linux

    rz

  3、將上傳的RocketMQ解壓

    unzip rocketmq-all-4.3.0-source-release.zip

  4、編譯部署

    ①在解壓后生成的RocketMQ文件夾下:cd rocketmq-all-4.3.0/,

    ②使用 Maven 來編譯整個項目  mvn -Prelease-all -DskipTests clean install -U

    大約5分鍾后出現如下內容表示部署成功

[INFO] Reactor Summary:
[INFO]
[INFO] Apache RocketMQ 4.3.0 4.3.0 ........................ SUCCESS [02:48 min]
[INFO] rocketmq-logging 4.3.0 ............................. SUCCESS [ 17.417 s]
[INFO] rocketmq-remoting 4.3.0 ............................ SUCCESS [ 11.507 s]
[INFO] rocketmq-common 4.3.0 .............................. SUCCESS [ 8.931 s]
[INFO] rocketmq-client 4.3.0 .............................. SUCCESS [ 14.016 s]
[INFO] rocketmq-store 4.3.0 ............................... SUCCESS [ 8.584 s]
[INFO] rocketmq-srvutil 4.3.0 ............................. SUCCESS [ 2.288 s]
[INFO] rocketmq-filter 4.3.0 .............................. SUCCESS [ 2.438 s]
[INFO] rocketmq-broker 4.3.0 .............................. SUCCESS [ 7.253 s]
[INFO] rocketmq-tools 4.3.0 ............................... SUCCESS [ 3.480 s]
[INFO] rocketmq-namesrv 4.3.0 ............................. SUCCESS [ 1.642 s]
[INFO] rocketmq-logappender 4.3.0 ......................... SUCCESS [ 2.533 s]
[INFO] rocketmq-openmessaging 4.3.0 ....................... SUCCESS [ 3.220 s]
[INFO] rocketmq-example 4.3.0 ............................. SUCCESS [ 1.757 s]
[INFO] rocketmq-test 4.3.0 ................................ SUCCESS [ 5.503 s]
[INFO] rocketmq-distribution 4.3.0 4.3.0 .................. SUCCESS [ 51.228 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:13 min
[INFO] Finished at: 2018-08-10T01:14:58+08:00
[INFO] ------------------------------------------------------------------------
[root@localhost rocketmq-all-4.3.0]#

 5、啟動nameserver

  ①進入目錄: /usr/rocketmq/rocketmq-all-4.3.0/distribution/target/apache-rocketmq 

  ②執行 nohup sh bin/mqnamesrv &

  ③執行 tail -f ~/logs/rocketmqlogs/namesrv.log,出現以下內容表示nameserver啟動成功 

[root@localhost apache-rocketmq]# pwd
/usr/local/rocketmq-all-4.3.0/distribution/target/apache-rocketmq
[root@localhost apache-rocketmq]# nohup sh bin/mqnamesrv &
[1] 5865
[root@localhost apache-rocketmq]# nohup: 忽略輸入並把輸出追加到"nohup.out"
tail -f ~/logs/rocketmqlogs/namesrv.log
2018-08-10 01:29:12 INFO main - tls.client.keyPath = null
2018-08-10 01:29:12 INFO main - tls.client.keyPassword = null
2018-08-10 01:29:12 INFO main - tls.client.certPath = null
2018-08-10 01:29:12 INFO main - tls.client.authServer = false
2018-08-10 01:29:12 INFO main - tls.client.trustCertPath = null
2018-08-10 01:29:13 INFO main - Using OpenSSL provider
2018-08-10 01:29:14 INFO main - SSLContext created for server
2018-08-10 01:29:14 INFO NettyEventExecutor - NettyEventExecutor service started
2018-08-10 01:29:14 INFO main - The Name Server boot success. serializeType=JSON
2018-08-10 01:29:14 INFO FileWatchService - FileWatchService service started

6、啟動broker

  ①同樣進入 RocketMQ 安裝目錄下的  /usr/rocketmq/rocketmq-all-4.3.0/distribution/target/apache-rocketmq 目錄

  ②執行nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true &

  ③執行tail -f ~/logs/rocketmqlogs/broker.log

    如果看到 "The broker[%s, xxx.xx.xx.xx:10911] boot success..." ,則表示啟動成功

    如果看到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:
      # /usr/local/rocketmq-all-4.3.0/distribution/target/apache-rocketmq/hs_err_pid7209.log
    說明內存不足,解決辦法:

        ①打開目錄rocketmq-all-4.3.0/distribution/target/apache-rocketmq/bin找到nameserver和broker的 runbroker.sh 和 runserver.sh       

        ②runserver.sh 文件中 修改 JVM 配置下的第一行,將原來 4g 調小一點
        #===========================================================================================
        # JVM Configuration
        #===========================================================================================
        #JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
        JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
        JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -    

          。。。。      

        $JAVA ${JAVA_OPT} $@
        ③runbroker.sh 文件中 修改 JVM 配置下的第一行,將原來 8g 調小一點        

            #===========================================================================================
            # JVM Configuration
            #===========================================================================================
            #JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
            JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m"
            JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -              XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
              。。。。。
            #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
            JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
            JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
        ④然后再次啟動 broker 時就成功了,broker 注冊到了 nameserver 上了(localhost:9876

 

  注意,如果出現出現connect to 172.17.42.1:10911 failed異常處理方案:

  1、目錄rocketmq-all-4.3.0/distribution/conf/broker.conf中添加nameserver=127.0.0.1:9876(該地址固定的)

                           添加brokerip1=192.168.80.4(rocketmq安裝服務器地址)

  2、啟動broker:nohup sh mqbroker -n localhost:9876 -c ../conf/broker.conf &

 

7、關閉broker和nameserver  

  sh bin/mqshutdown broker
  sh bin/mqshutdown namesrv

 

8、rocketmq查看指令

目錄:cd distribution/target/apache-rocketmq/bin

  首先進入 RocketMQ 工程,進入/RocketMQ/bin 在該目錄下有個 mqadmin 腳本 .
  查看幫助: 在 mqadmin 下可以查看有哪些命令
  a: 查看具體命令的使用 : sh mqadmin
  b: sh mqadmin help 命令名稱
  例如,查看 updateTopic 的使用
  sh mqadmin help updateTopic
  2. 關閉nameserver和所有的broker:
  進入到bin下:
  sh mqshutdown namesrv
  sh mqshutdown broker
  3. 查看所有消費組group:
  sh mqadmin consumerProgress -n 192.168.1.23:9876
  4. 查看指定消費組下的所有topic數據堆積情況:
  sh mqadmin consumerProgress -n 192.168.1.23:9876 -g warning-group
  5. 查看所有topic :
  sh mqadmin topicList -n 192.168.1.23:9876
  6. 查看topic信息列表詳情統計
  sh mqadmin topicstatus -n 192.168.1.23:9876 -t topicWarning
  7. 新增topic
  sh mqadmin updateTopic –n 192.168.1.23:9876 –c DefaultCluster –t topicWarning
  8. 刪除topic
  sh mqadmin deleteTopic –n 192.168.1.23:9876 –c DefaultCluster –t topicWarning

  9、查詢集群消息
  sh mqadmin clusterList -n 192.168.1.23:9876

 

二、RocketMQ可視化界面安裝

  1、下載文件 https://github.com/apache/rocketmq-externals ,上傳到linxu

  2、解壓 unzip rocketmq-externals-master.zip 解壓文件

  3、修改配置文件;(usr/local/rocketmq-externals-master/目錄下)

    find -name application.properties 可以查看到兩個文件都在rocketmq-console文件目錄下

    vim application.properties

    rocketmq.config.namesrvAddr=linux服務器ip:9876(ip1:port;ip2:port)

    server.port=8081  --(這里端口號為訪問這個可視化界面的端口號)

  4、編譯 usr/local/rocketmq-externals-master/rocketmq-console/目錄下

    執行mvn clean package -Dmaven.test.skip=true

    編譯成功后,在rocketmq-console目錄下會生成一個目錄:target目錄,該目錄下有啟動rocketmq界面的jar文件

  5、.啟動web(usr/local/rocketmq-externals-master/rocketmq-console/target目錄下)
    先創建文件夾目錄 mkdir /soft  mkdir RocketMQ   mkdir rocketmqlogs 
    執行nohup java -jar rocketmq-console-ng-1.0.1.jar >>/soft/RocketMQ/rocketmqlogs/log.out 2>&1 &
      --注意rocketmq-console-ng-1.0.1.jar和安裝版本rocketmq-console/target目錄下jar包相關的

  6、本地瀏覽器執行  http://192.168.80.4:8081/#/topic 便可以了

 

 二、基於docker安裝rocketmq

1、  拉取rocketmq鏡像

docker pull rocketmqinc/rocketmq

 

2、  拉取rocketmq-console鏡像

docker pull styletang/rocketmq-console-ng

 

3、  啟動nameserver

docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq sh mqnamesrv

 

4、 啟動broker

docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq sh mqbroker -c ../conf/broker.conf

 

由於啟動broker時rocketmq默認指定為內網地址,會導致外網無法連接到broker,報出如下錯誤信息: connect to xxx.xx.xx.xx:10911 failed

解決方案:

  ①docker exec -it xxxxx bash    --xxx是指broker對應的containerid(通過docker ps查看對應containerid)

  ②cd ../conf

  ③vi broker.conf

  ④增加brokerIP1 = xxx.xxx.xxx.xxx  --這里的ip地址指定為外網地址(即服務器地址)

       ⑤重啟broker容器

5、 啟動rocketmq-console

docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=xxx.xxx.xxx.xxx:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng

--- xxx.xxx.xxx.xxx 為服務器地址

三、模塊

 

 

1.OPS

 

 

這里很容易看清楚,雙擊標簽可以修改NameSerIP+Port。這里我測試過修改端口,發現重新發送一樣的消息,還是能消費。

其實也能理解,因為NameSer改變了,也只是使得Broker不能從本地獲取最新的路由信息。但是本地還是緩存了路由信息,所以一樣的Topic還是能獲取到路由信息,可以獲取到路由信息還是能發送到Brokder

所以這里我的測試是一次失敗的對照測試,但是這個模塊平時需求不大,就過了。

2.Dashboard

 

 

此圖表較簡單,其實是指所有Brokder處理消息的數量。比如從上圖可以看出來,我只有一個Brokder,並且此Brokder處理了6條消息。

 

 

此圖標可以篩選出某個Topic下5分鍾的消息數量。但是可以切換時間,所以就相當於可以查看某個Topic下的消息數量趨勢。

這條趨勢曲線有時候貌似不准確,測試過幾次有一次在那個時間點並沒有變化。

3.Cluster

 

 

這里有點坑,Cluster翻譯過來叫集群。這里並不是指消費模式中的集群消費,而是指Brokder的集群部署

但是我這里並沒有使用Broker的集群部署,所以只有一條數據。如果有多個broker那這里應該有多行數據。

每一行中各項代表的意思如下

  • Broker --- Broker的名字
  • Address --- 地址
  • Today Produce Count --- 今天發送的消息數量
  • Today Consume Count ---- 今天消費的消息數量

4.Topic

Topic算是重點之一。

 

 

這里的ADD/UPDATE是有作用的,可以在這里添加一個Topic,經過測試,感覺在這里意義不大。這里涉及到**消息的發送消費與TopicBroker**的關系,下篇文章分析。

每一行的Topic分成如下幾個操作按鈕

 

mark

 

點擊第一個[status]按鈕。顯示如下界面。可以從中獲取的信息比較多。該消息隊列的TopicBrokerNamequeueId

這里涉及到發送消息的原理。簡單來說

通過一個Topic可以獲取到對應的路由信息,路由信息里面維護了消息隊列集合,而我們發送消息其實就是通過消息隊列發送

消息隊列集合是個集合,所以也是有集合的屬性。其中每一項就是消息隊列,就是如下圖的每一行,每一行在集合中的位置就是queueId

 

mark

 

點擊第二項是保存在NameSer的路由信息。

 

mark

 

這里可能要注意下。保存在NameServer的路由信息和本地緩存的不一樣,本地緩存的屬性內容更豐富更多。看看源碼吧!

保存在NameSer的路由對象

public class TopicRouteData extends RemotingSerializable { private String orderTopicConf; private List<QueueData> queueDatas; private List<BrokerData> brokerDatas; private HashMap<String/* brokerAddr */, List<String>/* Filter Server */> filterServerTable; } 復制代碼

發現沒,其中包含的屬性和如上圖片類似。

queueDatasbrokerDatas,其中queueDatas包含消息隊列的基本情況,讀/寫的最大數目,brokerDatas包含Broker的位置信息。

再看看本地的真正路由信息,如上對象是它的屬性。

public class TopicPublishInfo { private boolean orderTopic = false; private boolean haveTopicRouterInfo = false; private List<MessageQueue> messageQueueList = new ArrayList<MessageQueue>(); private volatile ThreadLocalIndex sendWhichQueue = new ThreadLocalIndex(); private TopicRouteData topicRouteData; } 復制代碼

這下很明白了。

第三項[Consumer Manage],看名字也知道啥意思,該Topic的消費管理。

第四項[Topic Config],修改Topic的屬性,沒啥作用,本來代碼也可以控制。

第五項[Send Message],向該Topic發送消息。可以測試玩玩,將Consumer配置好,然后運行,不通過代碼發送,在這里發送消息,Consumer也能接受到。

 

mark

 

 

mark

 

5.Consumer

 

mark

 

沒太看懂這每一行代表啥意思。估計是一個Consumer對象。后面幾個按鈕點擊后,可以看看該Consumer的具體配置信息,好像沒啥東西。

6.Message

該模塊很重要,信息量也很多。

 

mark

 

比較容易理解,根據如上三項對Message分組查詢。一般第一項根據Topic查詢比較多。因為據說根據key去查詢有坑。建議idTopicid因為唯一最簡單。

 

mark

 

這是該Topic下的所有消息,不管是否消費都在內。

Message ID 、Tag 、Key都是消息比較重要的屬性。點擊右方的按鈕,可以看到該消息更加具體的情況。

 

mark

 

注意點都用箭頭標出來了,其他可能比較容易理解,無非就那幾個屬性。最后的TrackType很重要,對於排查問題。該屬性的值有好幾個,現在看到的幾個總結如下

  • CONSUMED 代表該消息已經被消費
  • NOT_CONSUME_YET 還沒被消費
  • UNKNOW_EXCEPTION 報錯了,可以看日志,一般報錯內容會緊跟其后,具體很容易排查出來
  • NOT_ONLINE 代表該Consumer並沒有運行

 

參考:https://www.cnblogs.com/pc-m/p/11046848.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM