消息中間件(Message Queue Middleware,簡稱MQ),它是一個利用高效可靠的傳遞機制進行與平臺無關的數據交流的工具。git
目前比較主流的MQ有RabbitMQ、Kafka、RocketMQ、ActiveMQ。github
一、異步(解決沒必要要的阻塞):MQ容許將一些消息放入到中間件中,但又並非當即處理它,而是等須要的時候再去消費它。服務器
二、解耦(減低模塊之間的耦合度):MQ在處理中插入了一個隱含的、基於數據的接口層;就像家裏的電器(如冰箱、烤爐、熱水器等),它們並非直接接在電路上的,而是經過插座達到通電的目的。異步
三、削峯(峯值任務的平滑處理):在訪問量劇增的狀況下,應用仍須要發揮做用。分佈式
四、冗餘(存儲、補償機制):有些狀況下,處理數據的過程當中可能會失敗,致使數據丟失;你能夠在操做數據前先持久化一份到MQ中,而後等數據處理完成後再刪掉這一數據,這樣便規避了數據丟失的風險。工具
五、分佈式消息傳遞:由於分佈式的可用性、可靠性、吞吐量高、響應時間快、跨平臺等特性,因此MQ很是適合分佈式應用之間的消息傳遞。ui
JMS(Java Message Service)規範,它本質上是一套API,僅適用於Java平臺上的消息規範;而且經過標準的生產、發送接口來簡化企業的開發。中間件
一、JMS對象模型包含的元素對象
二、JMS消息模型blog
AMQP(Advance Message Queuing Protocol)協議是一套開放的MQ標準,支持不一樣語言的不一樣的MQ產品。
AMQP組件:
一、生產、消費者。
二、消息:包括有效載荷與標籤;有效載荷:須要傳輸的數據;標籤:描述有效載荷的屬性;RabbitMQ經過標籤決定誰改得到該消息,而消費者只能獲得有效載荷。
三、信道:它是一個虛擬的鏈接,創建在真實的TCP、IP鏈接之上,全部的AMQP都經過信道傳輸消息;因創建TCP、IP鏈接很是消耗服務器資源,因此纔有了信道的出現,它有點像鏈接池的那種感受。
四、交換器、隊列、綁定、路由鍵:隊列經過路由鍵綁定到交換器,生產者把消息發送到交換器,交換器再根據綁定的路由鍵把消息路由到對應的隊列中,而後再由訂閱該消息的消費者進行消費。
RabbitMQ是一款遵循AMQP規範的MQ,其具備消息確認機制、隊列消息的持久化、消息拒收機制、默認交換器、mandatory(防丟失機制)。
見https://github.com/mrjdrs/rabbitmq-demo.git的rabbitmqhelloWorld。