消息隊列(MQ)


消息隊列介紹

  • 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這三種都屬於訂閱模型,只不過進行路由的方式不同。
    消息模型:簡單隊列、工作隊列、發布/訂閱隊列、路由隊列、主題隊列


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM