RocketMQ服務搭建_1

rocketmq是阿里研發,並貢獻給Apache的一款分佈式消息中間件。html

RcoketMQ 是一款低延遲、高可靠、可伸縮、易於使用的消息中間件。java

ACE環境:(Adapted communication environment)自適配通訊環境linux

 ACK:命令應答(Acknowledgement)git

rocketMQ參照jms,可是並不遵循jms規範,所以也就不存在activeMQ的createQueue,createTopic進行ptp鏈接,直接負載均衡依託於groupName。github

JMS (java message server)的PTP模型:point to point modelspring

BROKER :中繼器(代理人),即RocketMQ服務,也稱provider。apache

同步刷盤-消息阻塞,能保證數據絕對完整性,異步刷盤-信息丟失,但吞吐量增大。瀏覽器

訂閱者和發佈者狀況下,會直接廣播到group下的全部customer。tomcat

RocketMQ做用:springboot

  •         解耦合
  •        消峯
  •        異步
  •        消息一致性 

rocketMQ可作到平均分配,不一樣於其餘的mq有隨機性分配。

 搭建:

前提要求:

rocketMQ由java編寫,所以須要jdk環境。

jdk1.7+,tomcat7.0+,主機64位,

http://rocketmq.apache.org/dowloading/releases/

rocketMQ下載解壓到指定位置。

在兩臺主機上建立/etc/hosts地址和名稱。

192.168.68.137 rocketmq-nameserver1
192.168.68.138 rocketmq-nameserver2

 建立存儲路徑:

[root@localhost program]# mkdir rocketmq/store
[root@localhost program]# mkdir rocketmq/store/commitlog
[root@localhost program]# mkdir rocketmq/store/consumequeue
[root@localhost program]# mkdir rocketmq/store/index

 

 修改配置文件 rocketmq/config:

drwxr-xr-x. 2 root root  4096 Sep 19  2017 2m-2s-async    //異步複製
drwxr-xr-x. 2 root root  4096 Sep 19  2017 2m-2s-sync     //同步雙寫
drwxr-xr-x. 2 root root  4096 Sep 19  2017 2m-noslave     //雙主

 

若是是搭建雙主,則進入雙主對應的文件夾:

修改文件rocketmq-a.properties 和 rocketmq-b.properties 

可參照一下的配置項,注意文件夾路徑,和nameserver的host名,以及broker-name.

RocketMQ 部分 配置項(https://blog.csdn.net/w_x_z_/article/details/70225303)

配置說明:

brokerClusterName=rocketmq-cluster      #集羣名,多個mq集羣須要使用一個統一的名字,最好是按照示例自動給的名字,防止人爲輸錯,致使集羣失敗。
brokerName=broker-a #當前主機節點名稱,按照mq的慣性進行起名,好比第一個爲 brokerName=broker-a,第二個文件爲brokerName=broker-b
brokerId=0 #master節點的ID都爲0,>0的數就爲Slave。
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #用於多個nameserver進行互相發現,注意多個用分號鏈接,名字和/etc/hosts中保持一致。
defaultTopicQueueNums=4 #默認設置1個topic對應4個隊列。
autoCreateTopicEnable=true #是否容許自動建立Topic。這種最好設置爲false,否則隨意注入會形成資源無形損耗,好比我原本消費者只消費T1,T2,
#可是若是傳過來的是T3~T100(惡意攻擊),則消費不掉,會在mq中進行積壓,所以建議設置爲false.
autoCreateSubscriptionGroup=true #是否容許自動建立訂閱組,也是同理最好關閉掉,不讓自發產生。
listenPort=10911 #broker的監聽端口號,一個broker會佔用3個端口,即10911,10912,10913,同臺機器要隔幾個端口
deleteWhen=04 #文件在服務器被刪除掉的時間,例 04點的時候被刪除。
fileReservedTime=120 #文件保留最長時間默認是48小時,也就是2天。
mapedFileSizeCommitLog=1073741824 #commit文件大小限制,超過則會新建一個文件進行保存。commitlog用於存放從producer傳遞過來的數據內容。
mapedFileSizeConsumeQueue=300000 #
每一個文件默認存30W條,根據業務狀況調整,consumequeue用於存放文件內容索引和topic以及隊列的邏輯關係。
brokerRole=ASYNC_MASTER #可選擇同步雙寫,或異步複製(SYNC_MASTER ASYNC_MASTER SLAVE),若是是從節點就用SLAVE

#destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000

# 檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88

#存儲路徑
storePathRootDir=/usr/local/program/rocketmq/store

#commitLog存儲路徑
storePathCommitLog=/usr/local/program/rocketmq/store/commitlog

#消費隊列存儲路徑
storePathConsumeQueue=/usr/local/program/rocketmq/store/consumequeue

# 消息索引存儲路徑
storePathIndex=/usr/local/program/rocketmq/store/index

# checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/program/rocketmq/store/checkpoint

#abort 文件存儲路徑
abortFile=/usr/local/program/rocketmq/store/abort

#限制的消息大小
maxMessageSize=65536

# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000

# 刷盤方式
# - ASYNC_FLUSH 異步刷盤
# - SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH

 

#checkTransactionMessageEnable=false

#發消息線程池數量
#sendMessageTreadPoolNums=128

#拉消息線程池數量
#pullMessageTreadPoolNums=128

isVIPChannel=false

 注意: brokerRole 我從別人那copy的配置文件,當時這個名稱是brokerRote 致使一直Slave不起做用。

            注意用替換的時候storepath,我噹噹時從服務和主服務交叉,store用的store2,直接用全替換將路徑名也替換掉了,致使Slave啓動不起來。

 

修改logs文件位置,替換文件的存放位置: 因斜槓有特殊意義,所以須要反斜槓作不轉義聲明

>mkdir rocketmq/logs
>cd rocketmq/config && sed -i 's/${user.home}/\/usr\/local\/program\/rocketmq/g' logback_*.xml

修改配置文件JAVA_OPT文件:

查看rocketmq/bin/runbroker.sh rocketmq/bin/runnameserver.sh能夠看出如下的java_opt中默認設置的內存達到8G,在生產上能夠,可是用虛擬機太大帶不起來。

所以須要所有調整爲1G,過小有可能啓動不起來。

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
修改成:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

啓動:

       注意:首先要啓動全部機器節點的nameServer.而後再啓動各節點的broker.

    在ab機器啓動nameserver:

      》nohup sh mqnamesrv &

    使用java的jps查看就能夠看到nameserver的進程。

     >jps

    在ab機器啓動broker,注意a機器用broker-a.properties,b機器用broker-b.properties:

    》nohup sh mqbroker -c /usr/local/program/rocketmq/conf/2m-noslave/broker-a.properties  &

有時會遇到有這種寫法  nohup sh **** >/dev/null >2&1 & 這種是爲了在當前目錄下不產生nohup.out文件。

   再用jps查看是否已經啓動進程。若是發現沒有broker的進程,則去logs下查看日誌nohup.sh或者broker文件,瞭解問題。

至此,服務端的啓動就算OK了。

  關閉:》sh mqshutdown broker   (先關閉全部的broker)

            》sh mqshutdown namesrv  (而後再關閉全部的namesrv)

 

清理數據:刪除掉 store中的文件夾及文件便可。

 

RocketMQ的監控服務平臺:

使用教程:RocketMq 監控 之rocketmq-console應用(https://yq.aliyun.com/articles/486069)

下載地址:https://github.com/apache/rocketmq-externals

目前rocketmq-console使用springboot,所以已經不須要安裝tomcat,內嵌有tomcat。

下載後,修改rocketmq-console的配置文件application.properties。

修改如下文件:

rocketmq.config.namesrvAddr=[參見broker-a.properties中namesrvAddr]

isVIPChannel=false

rocketmq.config.dataPath=/usr/local/program/rocketmq-console/data

 不過,也能夠先不作修改,在控制檯啓動後在OPT上添加也能夠。

而後從新打包 >mvn install -DskipTests

將target中的jar包放入到linux下,啓動

>nohup java -jar /rocketmq-console.jar &

也可添加參數指定啓動的port,和nohup啓動文件日誌地址  --server.port=12581 > /Disk/temp.txt &

若是瀏覽器訪問被拒絕,有多是linux端的防火牆未關閉致使,關閉防火牆後就OK了。

http://192.168.68.137:8080/

點擊菜單Cluster就能夠看到集羣的機器,默認會提供一些Topic。

 

雙主雙從的搭建注意事項:

     1. 從節點的brokerId=n,  n>0從節點的數值必定要大於0。

     2. 從節點的brokername名必定要和對應的主節點一致。

     3. 從節點的brokerRote=SLAVE。

     4. 因9876端口爲其默認端口,所以也就意味着一臺電腦使用一個NameServer。不能存在主節點和從節點部署在一臺機子上。

        若是用2個電腦作雙主雙從,則端口號要不同且至少隔3位,否則端口占用沒法啓動,且存儲位置不能同樣。(僅測試用),生產徹底分開。

       可參照文章: http://www.javashuo.com/article/p-xedzspmm-br.html

2m-2s sync 同步雙寫,

2m-2s async 異步複製。

從節點通常會作數據備份,只有在主節點宕機時,從節點未被消費內容會被消費,可是從節點不能用於直接生產者寫操做。即主從不能互換。

當主節點重啓後,主節點會去從節點查詢offset同步offset。這樣就防止從消費後主又消費。

相關文章
相關標籤/搜索