SpringBoot2.x系列教程60--SpringBoot整合消息隊列之ActiveMQ環境配置

SpringBoot2.x系列教程60--SpringBoot整合消息隊列之ActiveMQ環境配置

作者:一一哥

我在上一章節中,給大家介紹了JMS協議及消息中間件,消息隊列等概念,本節中我會介紹ActiveMQ的概念及其環境配置。

一. ActiveMQ

1. ActiveMQ概述

Apache ActiveMQ ™ is the most popular and powerful open source messaging and Integration Patterns server.

Apache ActiveMQ is fast, supports many Cross Language Clients and Protocols, 
comes with easy to use Enterprise Integration Patterns and many advanced features while fully supporting JMS 1.1 and J2EE 1.4. 

ActiveMQ是由Apache出品的,一款流行的,能力強勁的開源消息總線,ActiveMQ實現了JMS消息協議。ActiveMQ是一個完全支持JMS1.1和J2EE 1.4規範的 JMS Provider實現,它非常快速,支持多種語言的客戶端和協議,而且可以非常容易的嵌入到企業的應用環境中,並有許多高級功能。

2. ActiveMQ特性

1️⃣.多種語言和協議編寫客戶端.

語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。

應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP;

2️⃣.完全支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務);

3️⃣.對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統裏面去,而且也支持Spring2.0的特性;

4️⃣.通過了常見J2EE服務器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測試,其中通過 JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE1.4商業服務器上;

5️⃣.支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA;

6️⃣.支持通過JDBC和journal提供高速的消息持久化;

7️⃣.從設計上保證了高性能的集羣,客戶端-服務器,點對點;

8️⃣.支持Ajax;

9️⃣.支持與Axis的整合;

🔟.可以很容易得調用內嵌JMS provider,進行測試.

3. ActiveMQ的使用場景

1️⃣.多個項目之間集成
(1) 跨平臺; 
(2) 多語言; 
(3) 多項目.

2️⃣.降低系統間模塊的耦合度,解耦;

3️⃣. 流量削峯。

4. ActiveMQ的消息傳遞模式

P2P (點對點)消息域使用 queue 作爲 Destination,消息可以被同步或異步的發送和接收,每個消息只會給一個 Consumer 傳送一次。
Pub/Sub(發佈/訂閱,Publish/Subscribe)消息域使用 topic 作爲 Destination,發佈者向 topic 發送消息,訂閱者註冊接收來自 topic 的消息。
發送到 topic 的任何消息都將自動傳遞給所有訂閱者。接收方式(同步和異步)與 P2P 域相同。

二. ActiveMQ安裝配置

1. 下載ActiveMQ

官方網站: 
http://activemq.apache.org/

下載後解壓縮.

大家下載好之後,將apache-activemq-5.11.1-bin.zip解壓縮,我們可以看到它的整體目錄結構:

ActiveMQ目錄結構介紹:

  • bin存放的是腳本文件;
  • conf存放的是基本配置文件;
  • data存放的是日誌文件;
  • docs存放的是說明文檔;
  • examples存放的是簡單的實例;
  • lib存放的是activemq所需jar包;
  • webapps用於存放項目的目錄。

2. 啓動ActiveMQ

我們瞭解ActiveMQ的基本目錄,下面我們運行一下ActiveMQ服務,雙擊bin目錄下的activemq.bat腳本文件或運行自己電腦版本下的activemq.bat,就可以看下圖的效果.

從上圖我們可以看到ActiveMQ的存放地址,以及瀏覽器要訪問的地址. 

3. 測試

ActiveMQ默認使用的TCP連接端口是61616,通過查看該端口的信息可以測試ActiveMQ是否成功啓動.

C:\Documents and Settings\Administrator>netstat -an|find "61616" 
TCP  0.0.0.0:61616     0.0.0.0:0  LISTENING

4. 監控界面

ActiveMQ默認啓動時,啓動了內置的jetty服務器,提供一個用於監控ActiveMQ的admin應用.
admin:admin 用戶名和密碼默認都是admin

ActiveMQ主界面簡介:

  • Home:查看 ActiveMQ 的常見信息;
  • Queues:查看 ActiveMQ 的隊列信息;
  • Topics:查看 ActiveMQ 的主題信息;
  • Subscribers:查看主題的訂閱者信息;
  • Connections:查看 ActiveMQ 客戶端的連接信息;
  • Network:查看 ActiveMQ 的網絡信息;
  • Scheduled:查看 ActiveMQ 的定時任務;
  • Send:用於通過表單方式向隊列或者主題發送具體的消息。

5. 停止ActiveMQ

若要停止ActiveMQ服務器,只需要按着Ctrl+Shift+C,之後輸入y即可.

6. ActiveMQ的異常處理

6.1 如何防止消息重複發送?

解決方法:創建一個消息狀態表,通俗來說就是一個賬本,用來記錄消息的處理狀態。在每次處理消息之前,都去狀態表中查詢一次,如果已經有相同的消息存在,那麼就不處理,這樣可以防止重複發送。

6.2 消息丟失怎麼辦?

解決方案:進行消息持久化【比如對消息數據進行持久化JDBC,AMQ(日誌文件),KahaDB和LevelDB】,或者對非持久化的消息及時處理不要堆積,或者啓動事務,啓動事務後,commit()方法會負責的等待服務器的返回,也就不會關閉連接導致消息丟失了。

6.3 持久化消息非常慢怎麼回事?

默認的情況下,非持久化的消息是異步發送的,持久化的消息是同步發送的,遇到慢一點的硬盤,發送消息的速度是無法忍受的。但是在開啓事務的情況下,消息都是異步發送的,效率會有2個數量級的提升。所以在發送持久化消息時,請務必開啓事務模式。其實發送非持久化消息時也建議開啓事務,這並不會影響性能。

6.4 服務掛掉怎麼回事?

這得從ActiveMQ的儲存機制說起。在通常的情況下,非持久化消息是存儲在內存中的,持久化消息是存儲在文件中的。但是,當非持久化消息堆積到一定的程度,內存告急的時候,ActiveMQ會將內存中的非持久化消息寫入臨時文件中,以騰出內存。雖然都保存到了文件裏,但它和持久化消息的區別是,重啓後持久化消息會從文件中恢復,非持久化的臨時文件會直接刪除。

 

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