一、為什么要使用消息中間件
消息中間件就是可以省去繁瑣的步驟,直達目的,怎么講呢,就是比如你想很多人,知道你的動態,而知道的人可能手機沒電,可能手機信號不好,可能手機不在服務區,或者看的人比較忙,看的時間不固定,這樣的時候,你發送的消息怎么會讓其看到呢,就是建立一個微信公眾號,可以滿足用戶隨時看到你想讓其看到的消息,這就是中間件的一種應用方式,生活中老師講課的黑板,家中的電視機都是中間件的一種體現方式。
消息中間件的好處
1、解耦
2、異步
3、橫向擴展 :就是可以通過一個中間件進行一個功能多次的操作
4、安全可靠 消息中間件可以把消息保存
5、順序保存,比如kafka
二、什么是中間件
非底層操作系統軟件,非業務應用軟件,不是給最終用戶使用,不能直接給用戶帶來價值的軟件統稱為中間件。
三、什么是消息中間件
關注於數據的發送和接受,利用高效可靠的異步消息傳遞機制集成分布式系統。
四、什么是JMS
Java消息服務(Java Message Service)即JMS,是一個Java平台中關於面向消息中間件的API,用於在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。
五、什么是AMQP
AMQP(advanced message queuing protocol)是一個提供統一消息服務的應用層標准協議,基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同開發語言等條件的限制.

常見消息中間件對比
1、ActiveMQ
ActiveMQ是Apache出品,最流行的,能力強勁的開源消息總線. ActiveMQ是一個完全支持JMS1.1和J2EE1.4規范的JMS Provider實現,盡管JMS規范出台已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演着特殊的地位.
ActiveMQ特性
(1)多種語言和協議編寫客戶端.語言:
Java,C,C++,C#,Ruby,Perl,Python,PHP.
(2)應用協議:
OpenWire、Stomp REST,WS Notification,XMPP,AMQP
(3)完全支持JMS1.1和J2EE1.4規范(持久化,XA消息,事務)
(4)虛擬主題、組合目的、鏡像隊列
2、RabbitMQ
RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫。用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。
RabbitMQ特性
(1)支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript等
(2)AMQP的完整實現(vhost、Exchange、Binding、Routing Key 等)
(3)事務支持/發布確認
(4)消息持久化
3、Kafka
Kafka是一種高吞吐量的分布式發布訂閱消息系統,是一個分布式的、分區的、可靠的分布式日志存儲服務。它通過一種獨一無二的設計提供了一個消息系統的功能。(不是個嚴格的中間件,主要是用於日志轉存的)
Kafka特性:
(1)通過O(1) 的磁盤數據結構提供消息的持久化,這種結構對於即使數以TB的消息存儲也能夠保持長時間的穩定性能。
(2)高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒數百萬的消息。
(3)Partition、Consumer Group

