1. 程式人生 > 其它 >訊息佇列(MQ)

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