RabbitMQ介紹

一、簡介

? ? ? ? 介紹RabbitMQ首先需要知道MQ是什么,MQ是 message queue 的簡稱,是應用程序和應用程序之間通信的方法。

? ??????RabbitMQ是一個由erlang語言編寫的、開源的、在AMQP基礎上完整的、可復用的企業(yè)消息系統(tǒng)。支持多種語言,包括java、Python、ruby、PHP、C/C++等。

? ??????AMQP:advanced message queuing protocol ,一個提供統(tǒng)一消息服務的應用層標準高級消息隊列協(xié)議,是應用層協(xié)議的一個開放標準,為面向消息的中間件設計?;诖藚f(xié)議的客戶端與消息中間件可傳遞消息并不受客戶端/中間件不同產(chǎn)品、不同開發(fā)語言等條件的限制。

二、RabbitMQ五種消息發(fā)送模式

? ??????RabbitMQ包括五種隊列模式,簡單隊列、工作隊列、發(fā)布/訂閱、路由、主題、rpc等。

1、簡單隊列

簡單隊列

? ? ? ? 1、生產(chǎn)者將消息發(fā)送到隊列,消費者從隊列獲取消息。

? ? ? ? 2、一個隊列對應一個消費者。

2、工作隊列

工作隊列

? ? ? ? 1、一個生產(chǎn)者,多個消費者。

? ? ? ? 2、一個消息發(fā)送到隊列時,只能被一個消費者獲取。

? ? ? ? 3、多個消費者并行處理消息,提升消息處理速度。

? ? ? ? 注意:channel.basicQos(1)表示同一時刻只發(fā)送一條消息給消費者。

3、發(fā)布/訂閱模式(Publish/Subcribe)

發(fā)布/訂閱模式

? ? ? ? 將消息發(fā)送到交換機,隊列從交換機獲取消息,隊列需要綁定到交換機。

? ? ? ? 1、一個生產(chǎn)者,多個消費者。

? ? ? ? 2、每一個消費者都有自己的一個隊列。

? ? ? ? 3、生產(chǎn)者沒有將消息直接發(fā)送到隊列,而是發(fā)送到交換機。

? ? ? ? 4、每一個隊列都要綁定到交換機。

? ? ? ? 5、生產(chǎn)者發(fā)送的消息,經(jīng)過交換機到達隊列,實現(xiàn)一個消息被多個消費者獲取的目的。

? ? ? ? 6、交換機類型為“fanout”。

? ? ? ? 注意:交換機本身沒有存儲消息的能力,消息只能存儲到隊列中。

4、路由模式(Routing)

路由模式

? ? ? ? 路由模式是發(fā)布/訂閱模式的一種特殊情況。

? ? ? ? 1、路由模式的交換機類型為“direct”。

? ? ? ? 2、綁定隊列到交換機時指定 key,即路由鍵,一個隊列可以指定多個路由鍵。

? ? ? ? 3、生產(chǎn)者發(fā)送消息時指定路由鍵,這時,消息只會發(fā)送到綁定的key的對應隊列中。

4、主題模式(Topic)

主題模式

? ? ? ? 將路由鍵和某模式進行匹配。此時,隊列需要綁定到一個模式上。符號“#”匹配一個或多個詞,“*”匹配不多不少一個詞。

? ? ? ? 綁定隊列到交換機指定key時,進行通配符模式匹配。

三、RabbitMQ的其他特性

1、消息確認機制

? ? ? ? 生產(chǎn)者發(fā)送消息到RabbitMQ服務器,消費者從RabbitMQ服務器獲取消息,服務端如何知道消息被消費者正常消費了呢?這就要說消息確認機制,RabbitMQ有兩種消息確認機制。

? ? ? ? 模式1:自動確認

? ? ? ? 只要消息從隊列中獲取,無論消費者獲取到消息后是否成功消費消息,服務端都認為消息成功被消費。

? ? ? ? 模式2:手動確認

? ? ? ? 消費者從隊列獲取消息后,服務器會將消息標記為不可用狀態(tài),等待消費者的反饋。如果消費者一直沒有反饋,那么該消息將一直處于不可用狀態(tài)。api:channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);

2、持久化交換機和隊列

? ? ? ? 持久化:將交換機或隊列數(shù)據(jù)保存到磁盤,服務器宕機或者重啟之后數(shù)據(jù)依然存在。

? ? ? ? 非持久化:將交換機或隊列數(shù)據(jù)保存到磁盤到內存,服務器宕機或者重啟之后數(shù)據(jù)會丟失。

? ? ? ? 持久化性能要低于持久化,是否開啟持久化取決于業(yè)務需求。

? ? ? ??

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 關于消息隊列,從前年開始斷斷續(xù)續(xù)看了些資料,想寫很久了,但一直沒騰出空,近來分別碰到幾個朋友聊這塊的技術選型,是時...
    raysonfang閱讀 492評論 0 0
  • 1.關于RabbitMQ## RabbitMQ是一個開源的消息代理和隊列服務器,用來通過普通協(xié)議在完全不同的應用之...
    樸下柔閱讀 10,759評論 5 18
  • 消息服務擅長于解決多系統(tǒng)、異構系統(tǒng)間的數(shù)據(jù)交換(消息通知/通訊)問題,你也可以把它用于系統(tǒng)間服務的相互調用(RPC...
    馮艷輝brook閱讀 668評論 0 51
  • 來源 RabbitMQ是用Erlang實現(xiàn)的一個高并發(fā)高可靠AMQP消息隊列服務器。支持消息的持久化、事務、擁塞控...
    jiangmo閱讀 10,513評論 2 34

友情鏈接更多精彩內容