天天看點

ActiveMQ從源碼建構

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/catoop/article/details/50462739

衆多開源項目,我們一般都是直接拿過來用之而後快。不過我們也應該知道這些項目是如何從源碼建構而來的。
           

既然代碼是寫出來的,就不能避免有BUG存在,話說沒有完美的軟體,也沒有無漏洞的程式。

其實從源碼建構,步驟不多,總的來說是件很簡單的事情。了解了這樣一個過程,以後需要修改源碼或者在源碼之上進行二次開發也知道怎麼把源碼建構成可運作程式,本文以ActiveMQ為例,簡單概括一下如何從源碼建構可應用程式。旨在抛磚引玉,為需要的同學們指個路。

因為最近項目中需要AMQ,是以又把AMQ翻出來用了,中間遇到點瓶頸問題,是以需要修改AMQ的源碼來解決。

AMQ分為持久化和非持久化,AMQ的持久化現在預設的為kahadb,也可以配置使用資料庫來持久化,還有LevelDB。這是它目前已經提供的幾個可以直接配置的持久化方式。如果對AMQ進行過測試的同學應該都知道,AMQ如果配置了持久化,生産者的速度很低。但是實際業務開發中,很多時候我們又要保證資料不能丢失,是以我們必須要進行持久化操作。為了解決這個瓶頸問題,我們可以備采用第三方緩存或其他吞吐量高的持久化方式,是以我們通過修改AMQ的源碼來增加這些支援。大家有想法或好的方案,不妨留言探讨。

其實如果有的同學還在做MQ選型,就直接選擇RabbitMQ吧,這個綜合方面都要比AMQ要好。AMQ隻能說是老牌子,還是很吃香的,比較很多系統的需求AMQ足以應付。
           

如果對TPS要求非常高,不妨可慮下Apache的MQ新寵“Kafha”。如果不要求消息的持久化,ZeroMQ也是不錯的選擇,它的吞吐量就像一頭猛獸,隻是它不支援持久化。

AMQ是Java語言開發,本文以AMQ從源碼建構做個簡單步驟說明:

1、下載下傳源碼

大家可以從官網下載下傳AMQ對應版本的源碼,這裡給一個位址:

http://apache.fayea.com/activemq/

下載下傳源碼檔案 activemq-parent-5.13.0-source-release.zip 之後,解壓到本地磁盤。我把它放在H盤的amq目錄下。

2、打開CMD通過指令行的方式建構

cd H:\amq\activemq-parent-5.13.0

mvn -Dtest=false -DfailIfNoTests=false clean install

我在執行的時候,出現了一些jar包無法從maven倉庫下載下傳的錯誤,是以手動下載下傳jar包(這個網站可以下載下傳到很多jar:

http://www.java2s.com/Code/Jar/

http://maven.outofmemory.cn/

aether-util-0.9.0.M2.jar

xz-1.2.jar

plexus-archiver-2.4.4.jar

我下載下傳缺少的jar包後,手工安裝到到本地maven倉庫,指令如下:

mvn install:install-file -DgroupId=org.eclipse.aether -DartifactId=aether-util -Dversion=0.9.0.M2 -Dpackaging=jar -Dfile=aether-util-0.9.0.M2.jar

mvn install:install-file -DgroupId=org.tukaani -DartifactId=xz -Dversion=1.2 -Dpackaging=jar -Dfile=xz-1.2.jar

mvn install:install-file -DgroupId=org.codehaus.plexus -DartifactId=plexus-archiver -Dversion=2.4.4 -Dpackaging=jar -Dfile=plexus-archiver-2.4.4.jar

mvn install:install-file -DgroupId=org.codehaus.plexus -DartifactId=plexus-io -Dversion=2.0.10 -Dpackaging=jar -Dfile=plexus-io-2.0.10.jar

mvn install:install-file -DgroupId=groovy -DartifactId=groovy-all-1.0-jsr -Dversion=03 -Dpackaging=jar -Dfile=groovy-all-1.0-jsr-03.jar

大家根據實際報錯的jar包按這樣操作安裝到本地倉庫即可。

我的網絡不行,老是出現下載下傳中斷的情況,為此我倒騰好久。

總之,如果是網絡問題就重複執行 mvn -Dtest=false -DfailIfNoTests=false clean instal 重試,如果是實在下載下傳不下來jar包,就自己尋找後手工安裝。如此反複,直到出現 BUILD SUCCESS 為止,如下:

………………
………………
[INFO] ActiveMQ :: Tooling ............................... SUCCESS [0.061s]
[INFO] ActiveMQ :: Memory Usage Test Plugin .............. SUCCESS [3.111s]
[INFO] ActiveMQ :: Performance Test Plugin ............... SUCCESS [5.169s]
[INFO] ActiveMQ :: StartUp/Stop Plugin ................... SUCCESS [4.619s]
[INFO] ActiveMQ :: Web ................................... SUCCESS [1.961s]
[INFO] ActiveMQ :: OSGi bundle ........................... SUCCESS [20.011s]
[INFO] ActiveMQ :: Blueprint ............................. SUCCESS [0.634s]
[INFO] ActiveMQ :: Web Demo .............................. SUCCESS [12.950s]
[INFO] ActiveMQ :: Web Console ........................... SUCCESS [10.347s]
[INFO] ActiveMQ :: Karaf Integration Tests ............... SUCCESS [3.049s]
[INFO] ActiveMQ :: Integration Test :: Spring 3.1 ........ SUCCESS [0.627s]
[INFO] ActiveMQ :: Assembly .............................. SUCCESS [38.243s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7:22.460s
[INFO] Finished at: Thu Dec 24 01:35:48 CST 2015
[INFO] Final Memory: 176M/711M
[INFO] ------------------------------------------------------------------------
H:\amq\activemq-parent-5.13.0>           

建構完成後,進入assembly/target 目錄,其中的兩個壓縮檔案就分别是Linux 和Windows檔案,解壓即可。(Linux是tar結尾檔案,Win是zip結尾檔案)

通過eclipse建構eclipse工程檔案

指令:mvn eclipse:eclipse

然後就可以從eclipse導入工程了,代碼修改後,再使用上面的建構指令建構即可。

下面是導入後的工程: