本次引入ActiveMQ的背景:
ActiveMQ主要解決什麼問題:
在項目中,將一些無需即時返回且耗時的操作提取出來,進行了異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提高了系統的吞吐量。比如記錄用戶的操作日誌。這部分就能提出來。操作日誌,這種東西,用戶也不會馬上去看他,爲何不用更好的技術,ActiveMQ呢,這樣做還節省了服務器請求響應時間。
一、什麼是activemq:
ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線;速度快,支持多種語言和協議。
ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規範的 JMS Provider實現。
JMS:Java消息服務(Java Message Service)應用程序接口,是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通信。
二、ActiveMQ的特點和優勢:
優點:
(1)activemq可以很好的運行在任何JVM上,而不只是集成到tomcat(jboss等都行)的應用服務器中;比如jbossmq就只支持jboss。
(2)activemq支持大量的跨語言客戶端(Java,C,C++,C#,Ruby,Perl,Python,PHP)
(3)activemq支持許多不同的協議(Ajax/REST/Stomp/OpenWire/XMPP)
(4)activemq支持許多高級功能,例如MessageGroups,ExclusiveConsumer,CompositeDestinations(同一個消息一次發送到多個消息隊列)。
(5)AdvisoryMessage:實現了ActiveMQ的broker上各種操作的記錄跟蹤和通知。
(6)activemq支持可靠連接並且具有可配置的自動重連接
(7)activemq對spring有很好的支持.(文檔也比較全面)
(8)activemq是速度非常快;一般要比jbossmq快10倍
缺點:
(1)傳輸文件不方便,而且效率相對來說不是很高,使用起來也不方便,封裝代價高。當然這個缺點對於一個消息總線來說此功能不算最主要的,還在忍受範圍內。
(2)丟消息、但曝光率高、文檔全。
三、ActiveMQ支持的數據格式:
JMS規範中的消息類型包括TextMessage、MapMessage、ObjectMessage、BytesMessage、和StreamMessage等五種。
四、ActiveMQ的應用場景:
http://blog.csdn.NET/dly1580854879/article/details/68486367
五、ActiveMQ在開發中的使用以及遇到問題的解決:
1.先來一個demo,感受一下消息的發送與接收的過程:http://blog.csdn.net/dly1580854879/article/details/68488003
問題:
1. 消息發送失敗了怎麼辦?
------重發機制http://blog.csdn.net/dly1580854879/article/details/68489798
2. 消息消費失敗了怎麼辦?
------二次消費,就是捕捉異常,把消息獲取過來,重新入隊,再消費。
3. 我怎麼樣知道消息已經發送成功了?
------消息確認http://blog.csdn.net/dly1580854879/article/details/68490197
4. 同一消息消費多次失敗了,怎麼辦?
----進入死信隊列、或者重新消費http://blog.csdn.net/dly1580854879/article/details/68946717
5. 我現在有兩個業務的消息,發送到同一個queue,怎麼識別出來他們是不同的消息?
------給消息做標記
6. 消息多次消費任然失敗,死信隊列裏面沒有東西,什麼原因造成的?怎麼解決?
------沒有設置事務、事務回滾操作,這才使得消息消費失敗後,直接丟棄。
設置事務就能解決此問題。
7. 怎麼樣設置事務?
----設置事務http://blog.csdn.net/dly1580854879/article/details/68945997
8. 多個消費者怎麼設置?---設置多個消費者
<!--ActiveMQ:設置多個並行的消費者 -->
<property name="concurrency"value="2-3" />
六、activeMQ的兩種通訊方式: