消息隊列介紹
- MQ(Message Queue)消息隊列,是基礎數據結構中“先進先出”的一種數據結構。一般用來解決應用解耦,異步消息,流量削峰等問題,實現高性能,高可用,可伸縮和最終一致性架構。
- 消息隊列是典型的:生產者、消費者模型。生產者不斷向消息隊列中生產消息,消費者不斷的從隊列中
獲取消息。因為消息的生產和消費都是異步的,而且只關心消息的發送和接收,沒有業務邏輯的侵入,
這樣就實現了生產者和消費者的解耦。 - 如果以后有其它系統也依賴商品服務的數據,同樣監聽消息即可,商品服務無需任何代碼修改
AMQP和JMS
- MQ是消息通信的模型,並不是具體實現。現在實現MQ的有兩種主流方式:AMQP、JMS。
AMQP
- AMQP,即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標准高級消息隊列協議,是應用層協議的一個開放標准,為面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同的開發語言等條件的限制。Erlang中的實現有RabbitMQ等
JMS
- JMS即Java消息服務(Java Message Service)應用程序接口,是一個Java平台中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。Java消息服務是一個與具體平台無關的API,絕大多數MOM提供商都對JMS提供支持。
兩者間的區別和聯系: - JMS是定義了統一的接口,來對消息操作進行統一;AMQP是通過規定協議來統一數據交互的格式
- JMS限定了必須使用Java語言;AMQP只是協議,不規定實現方式,因此是跨語言的。
- JMS規定了兩種消息模型;而AMQP的消息模型更加豐富
常見MQ產品
- ActiveMQ:基於JMS
- RabbitMQ:基於AMQP協議,erlang語言開發,穩定性好
- RocketMQ:基於JMS,阿里巴巴產品,目前交由Apache基金會
- Kafka:分布式消息系統,高吞吐量
五種消息模型
- RabbitMQ提供了6種消息模型,但是第6種其實是RPC,並不是MQ
- 但是其實3、4、5這三種都屬於訂閱模型,只不過進行路由的方式不同。
消息模型:簡單隊列、工作隊列、發布/訂閱隊列、路由隊列、主題隊列