Activemq是著名的消息隊列産品,而持久化指的是在mq挂掉的時候,消息不會被抛棄,而是會被繼續儲存,等待程序複活。這個Activemq的持久化功能必須在5.9版本以上才會實作,而現在官方最新的mq版本是5.14.1,筆者的這個實驗也是使用5.14.1版本,實驗工具是金山雲伺服器,規格是2核4G無外網。
#wget http://www.apache.org/dyn/closer.cgi?filename=/activemq/5.14.1/apache-activemq-5.14.1-bin.tar.gz,然後解壓縮到指定的檔案夾裡,我選擇的就是根目錄,#tar -zxvf /activemq。
首先需要更改activemq檔案夾裡的conf/activemq.xml,重點改的是截圖裡的内容:
<a href="http://s3.51cto.com/wyfs02/M00/8A/5D/wKiom1gujjrBhAAYAACyOFWgvGs413.png" target="_blank"></a>
其中zkaddress寫的是對應的zk機器的"内網位址:端口号",多台機器用逗号隔開,預設zk的端口是2181。同時我設定在zk會給mq生成一個叫lctimermq這樣一個節點。
這裡一定要注意!!!有些童鞋可能出于職業習慣或者思維貫式就把線上環境正在使用的配置檔案拿來直接就用,以為線上的東西就是OK的,但是這一條在mq這裡絕對不好使!因為mq這裡的zk填寫的是線上的zk,如果你這時候啟動了mq,那麼正式線上的消息隊列就會轉成這台實驗機,後果也是災難性的,這是一個大坑,一定要切記切記~~~~
插播結束,上面那一段裡hostname裡面對應填寫本地的内網ip位址即可。
下面的80指的是“非持久化消息所占記憶體的百分比”,10GB是“持久化消息所占硬碟大小”,5GB是“臨時消息所占硬碟大小”,以上幾個值可以根據實際情況調整。
<a href="http://s2.51cto.com/wyfs02/M01/8A/5A/wKioL1guj-mS4nIqAAFhgh9wE6s106.png" target="_blank"></a>
這裡是端口定義和使用者驗證的密碼等等,61616是mq的工作監聽端口,8161是web端的端口,一般來說mq與服務是一對一搭配的,一個mq已經開了61616給A服務,再開一個61615端口給B服務,這樣做是有風險的,在生産環境裡不推薦。
如果真的由于業務需要一台機器上運作多個ActiveMq,這裡主要說一下有什麼地方不重複:
1、brokerName名稱不能重複
2、端口号不能重複uri = tcp://localhost:50509
3、kahadb路徑不能重複
4、管理端口不能重複contextPort = 2019
言歸正傳,這個activemq.xml儲存退出之後,打開同檔案夾的credentials.properties,這裡是設定mq密碼的地方,mq是有兩個密碼的,一個消息傳遞用的,另外一個是給web界面用的,這裡的密碼是給消息傳遞用的。這裡設定好了之後,要記住,同時在zk裡也要有這樣的一個節點。
<a href="http://s1.51cto.com/wyfs02/M01/8A/5E/wKiom1guk1ih4ifdAAAXzHyU7fw155.png" target="_blank"></a>
<a href="http://s2.51cto.com/wyfs02/M01/8A/5A/wKioL1guk6WC6A8rAAATohSTOiY932.png" target="_blank"></a>
uris的地方是寫mq内網位址的地方,同時在密碼下面我們規定了一個消息通道的名稱,這個通道會在web 界面裡展現出來。
改完了mq工作的密碼,為了安全,我們還要改一下web界面的密碼,mq預設的web界面賬号密碼都是admin,現在我們把賬号還是設定為admin,密碼更改一下,那麼就需要打開conf/jetty-realm.properties,然後如圖:
<a href="http://s3.51cto.com/wyfs02/M02/8A/6F/wKiom1gvM8XhtyyhAAAcoFLfUIA814.png" target="_blank"></a>
這裡把密碼改成了mq1118lc,儲存退出,啟動就會生效。
這還沒有完,在5.9以上的版本,要需要更改一個環境變量,這個環境變量是在bin/env裡,打開env檔案,有ACTIVEMQ_OPTS_MEMORY的字段,本實驗機是4G記憶體,是以我寫成ACTIVEMQ_OPTS_MEMORY="-Xms64M -Xmx3G",這句話的意思是:分給activemq最小是64M、最大為3G的可用記憶體。儲存退出。
這裡也要注意一下,如果機器使用了3G效果不理想的話,是需要提升記憶體的,如果提升了實體記憶體,但是不更改這個env檔案對于mq是無效的,是以再提升了實體記憶體之後别忘了更改env這個檔案同時restart activemq。
至于啟動mq,就是在bin檔案夾裡,./activemq start即可,然後使用./activemq status檢視程序情況。搭配好其他的程序服務項,啟動mq完畢之後,在浏覽器位址欄裡輸入"外網位址:8161/admin"來到web界面,輸入我們剛剛設定的admin/mq1118lc之後就能看見mq的web界面了。選擇第一行的queue,就會看到mq的資訊總況:
<a href="http://s3.51cto.com/wyfs02/M01/8A/6F/wKiom1gvNuSw1wVnAAB91iQxlc0594.png" target="_blank"></a>
MQ有時候會程序存在,但是卻不能正常工作,而來到mq的伺服器上使用#netstat -ntpl|grep 61616的時候,發現其61616端口根本沒有在監聽,那麼這種情況證明mq的啟動其實是失敗的,是以這個時候應該來到日志,檢視一下日志的資訊,進而對症下藥。
第一種情況:
<a href="https://s4.51cto.com/wyfs02/M01/8E/1B/wKioL1i2KLWSdZyHAABNm-yEwyw398.png" target="_blank"></a>
這是一個ERROR資訊,主要問題就是hostname裡面帶有中文,這裡需要更改/etc/hosts檔案,把中文去掉。
注意一下,java類型的軟體,比如activemq,比如storm,比如zookeeper,他們在識别中文上是很不友好的,是以請避免起中文名!
第二種情況:
如果在啟動mq出現如下錯誤:
<a href="https://s3.51cto.com/oss/201710/24/3c0e32b19c050b618ba81ae0a7424895.png" target="_blank"></a>
那就是activemq的env檔案裡JAVA_HOME為空,這個時候我們需要先檢視一下/etc/profile檔案,看到java home的位址,如下:
<a href="https://s2.51cto.com/oss/201710/24/d38788c65972aab7ea76a037e8e5085e.png" target="_blank"></a>
那麼就把/usr/jdk1.7.0_79 添加到env檔案的JAVA_HOME那一欄裡,然後重新開機MQ即可。
強文推薦!http://blog.csdn.net/yinwenjie/article/details/50991443
本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1874225