Part 1 ——ActiveMQ 概述

Apache ActiveMQ 是使用JMS(Java Message Service)規範的兩個系統間遠程通信的一個消息代理(消息中間件)。儘管ActiveMQ是使用Java語言編寫的,但它提供了多種語言的APIs,包括C/C++,.NET,Perl,PHP,Python,Ruby等等。ActiveMQ是Apache下的一款開源的軟件,遵循JMS1.1規範,是面向消息的中間件(MOM),它爲企業通信提供了高可用、高性能、可擴展、可靠和安全性。ActiveMQ旨在爲分佈式應用間遠程通訊。
何時使用ActiveMQ?

  • 異構應用集成
  • 作爲RPC的替代物
  • 降低應用間的耦合度
  • 作爲消息驅動架構的主幹
  • 提高應用的可擴展性 ——許多應用利用消息驅動的架構來提供巨大可擴展性,包括如下領域:電商、政府、製造商、網遊等等。

1. 下載安裝ActiveMQ

在安裝ActiveMQ之前,請先配置好Java開發環境,設置JAVE_HOME等環境變量。
下載ActivieMQ的最新版本:下載ActiveMQ
下載完後解壓到一個目錄下,接下來驗證是否可用。
打開cmd命令窗口,進入ActiveMQ的解壓目錄,然後再cd 到bin目錄下,輸入:

C:\apache-activemq-5.14.5>bin\activemq

服務正常啓動後在瀏覽器輸入http://127.0.0.1:8161/admin/ 賬號密碼都是admin,進入管理界面則表示已成功安裝ActiveMQ。當然ActiveMQ可以安裝爲Windows的系統服務而可以隨系統自動啓動,在bin目錄的win64目錄下有一個InstallService.bat批處理命令,雙擊執行就可以安裝爲系統服務。

2.安裝Ant和Maven

此處不做詳細介紹,請參考官網介紹。

3. 運行第一個示例

ActiviteMQ解壓目錄下有一個examples目錄,打開cmd窗口,進入到該目錄的openwire目錄下,再cd到其中一個文件夾下,如swissarmy,然後
執行如下命令:

ant consumer

該命令執行成功後,窗口處於消息等待狀態(消費者等待消息的到來)
接下來打開另一個cmd窗口,執行如下命令:

ant producer

執行成功後會在cmd窗口輸入2000個消息,同時consumer窗口在不斷的接收消息。

4.JMS domains(域、或者模式)

JMS有兩種類型的消息傳送模式,分別是point-to-point (點對點)和publish/subscribe(發佈/訂閱)。

4.1 point-to-point (點對點)

point-to-point (PTP) 消息傳遞模式使用destinations 被稱爲queues(隊列)。通過使用隊列,消息的發送和接收可以是同步的或者異步的方式。隊列上的每一個消息的接收只會傳遞一次而且只傳遞給一個消費者。這有點類似於在郵件服務器上的人對人的郵件的發送。消費者從隊列上獲取消息時,要麼使用MessageConsumer.receive() 方法以同步的方式接收,要麼通過註冊一個MessageListener示例使用 MessageConsumer.setMessageListener() 方法以異步的方式接收。隊列存儲所有的消息一直到這些消息被髮送或過期。

4.2 publish/subscribe(發佈/訂閱)

publish/subscribe (pub/sub) 的消息傳遞模式使用destinations 被稱爲topics(主題)。Publishers發佈者發送消息到這個主題上而註冊該主題的Subscribers訂閱者則從中接收消息。任何發送到主題上的消息
會自動發送到所有的訂閱者。這種消息傳遞模式有點類似於訂閱郵件。這是屬於一對多的範例。

持久性訂閱(durable subscription): 使用持久性訂閱時,當訂閱者與JMS provider(MOM)失去連接時,MOM將負責爲訂閱者存儲消息。訂閱者一旦連接上,將會從MOM上接收所有未過期的消息。持久性訂閱方式允許訂閱者與MOM斷開連接而不會丟失消息。

非持久性連接(Nondurable subscription) 這種方式訂閱,MOM將不會爲失去連接的訂閱者保存消息。

5 示例

5.1 準備工作

  • 安裝最新開發工具Eclipse Java EE IDE for Web Developers.
  • Eclipse配置好之前安裝好的MAVEN路徑
  • 把電子書中源碼下載下來:ActiveMQ in Action-src.zip
  • 在Eclipse中新建一個Maven project,根據源碼的包名新建好對應的package,然後將源碼全部複製到工程中,導入後會發現都是紅色的x,因爲依賴的jar包未導入。
    把相應的jar包下載下來
  • 修改pom.xml ,導入相應的jar包,這一步非常重要也非常難(我自己弄了幾個小時才弄好),因爲很容易出錯,往往因爲網絡原因或其他原因而導致對應的jar包未下載下來,通常需要手動到maven本地倉庫(安裝時指定的)找到對應的jar目錄,從網絡上下載下來再放到其中。這裏可以推薦一個非常有用的maven倉庫地址:Maven 倉庫,其中可以搜索到所有的jar包。建議pom.xml中的依賴一個一個的添加進去,成功一個再添加一個,不要一次性全粘貼過去。
  • 右鍵項目,Run as -> maven clean 然後再maven install,如果控制檯打印出BUILD SUCCESS,至此纔算成功。

5.2 示例1:the stock portfolio example(股票投資示例,發佈/訂閱模式)

如果準備工作做好了,下面的事情就輕鬆了,只需要幾個命令就可以了。前提是Maven install執行成功,即編譯成功。
- 先啓動ActiveMQ服務(如果配置爲系統服務,則在Windows服務管理界面啓動)
- 打開cmd窗口(消費者),進入到建好的Eclipse項目的目錄下(可以看到pom.xml),執行如下命令

mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch3.portfolio.Consumer -Dexec.mainClass=org.apache.activemq.book.ch3.portfolio.Consumer

執行後,首先會自動下載exec-maven-plugin插件依賴的所有的東西(之後就不用下載了)。下載完後,窗口處於信息等待狀態。

  • 打開另一個cmd窗口(發佈者),輸入如下命令:
mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch3.portfolio.Publisher -Dexec.args="CSCO ORCL"

執行成功後,會發送1000個消息,然後consumer窗口會不斷接收消息。

5.3 示例2 the job queue example(工作隊列示例,點對點模式)

有了示例1的成功執行,接下來容易得多

  • 先啓動ActiveMQ服務(如果配置爲系統服務,則在Windows服務管理界面啓動)
    • 打開cmd窗口(生產者或發佈者),進入到建好的Eclipse項目的目錄下(可以看到pom.xml),執行如下命令
mvn exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch3.jobs.Publisher

執行成功時可以看到窗口在不斷髮送消息,共1000個。

  • 打開另一個cmd窗口(消費者),輸入如下命令:
mvn exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch3.jobs.Consumer

執行成功後,看到窗口一下子將接收所有消息。

還有一種等效的方法,右鍵項目,Run as -> Maven build…,然後在Goals填寫命令(把mvn去掉)
這裏寫圖片描述

英文原版電子書下載:ActiveMQ in Action.pdf
電子書中各章節源碼下載:ActiveMQ in Action-src.zip

319.《道德經》第七十二章3 此心光明,亦復何言?
原文:知我者希,則我貴矣。是以聖人被褐而懷玉。
翻譯:知道我講的道的原則的人非常稀少,按照道的原則去做的人人生會變得有價值起來。所以悟道的領導者外表看起來很普通但是心裏像懷抱玉石一樣光明。
內心光明,不陰暗,不糾結,這樣的人生才幸福。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章