訊息佇列(MQ)
阿新 • • 發佈:2021-11-06
訊息佇列介紹
- 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這三種都屬於訂閱模型,只不過進行路由的方式不同。
訊息模型