2、rabbitMQ進一步介紹

1、Rabbit做用安全

  • 程序解耦,如一時間須要重複寫入大量的數據時
  • 當RabbitMQ的負載增長時,因爲它的消息是循環給消費者處理的有必定的負載均衡的做用

2、發後即忘模型負載均衡

消息通訊領域主要適用的模型之一發後即忘模型是。咱們只需關心這些任務將會完成,而不需關心是否實時完成。
一、發送警告
二、批處理: 上傳圖片會有多個業務,如記錄日誌,增長積分等能夠經過famous 交換器:會將消息匹配到全部附加在此交換器上的隊列 來廣播你成功上傳的任務從而觸發後面的任務。

3、集羣性能

RabbitMq會始終記錄如下四種類型的內部元數據spa

  • 隊列元數據:隊列名稱和它們的屬性(是否可持久化,是否自動刪除?)
  • 交換器元數據:交換器名稱、類型和屬性(可持久化)
  • 綁定元數據 :一張簡單的表格展現瞭如何將消息路由到隊列
  • vhost元數據:爲vhost內的隊列、交換器和綁定提供明湖曾空間和安全屬性

一、集羣中的隊列日誌

集羣中單節點Rabbit的隊列保存有本身的隊列信息和隊列綁定關係,而其餘節點只有該隊列的元數據(即隊例的名稱和屬性),不會保存隊列的內容和綁定關係。緣由同步複製開銷太大^_^。

注意:
問題1、當Rabbit重啓其隊列的綁定關係也會銷燬,消息被銷燬隊列

解決方式:在開始時設置隊列持久化。

二、集羣中的交換器圖片

交換器只是邏輯上存在的,起到路由的用至關於一張記錄了隊列信息的查詢表,得到信道的消息後再這張表中經過不一樣方式進行匹配綁定。
輸入圖片說明

注意:
問題1、在路由綁定以前發生了消息丟失怎麼辦勒?事務

解決:一、使用AMQP事務。 二、返回確認消息,來記錄鏈接中斷時還沒有被確認的信息。 這兩種方法來確認消息沒法路由的到目標隊列的狀況。當在集羣中徹底複製結合,保證路由成功性從而不會丟失一條信息。

三、是內存節點仍是磁盤節點內存

每一個RabbitMQ節點,不論是單一節點系統或者是集羣,要麼是內存節點,要麼是磁盤節點。
  • 內存節點將全部的隊列、交換器、綁定、用戶、權限和vhost元數據都僅存儲在內存中
  • 磁盤節店則將元數據存儲在磁盤中
單節點系統只容許磁盤類型的節點,不然每次你重啓全部的配置信息都會丟失。在集羣中也能夠選擇配置部分節點爲內存節點,使得消息流動的性能更好
輸入圖片說明

說明:集羣中要設置內存節點的緣由,在集羣中聲明交換器、隊列或綁定的時候全部集羣節點都要同步其元數據。對於磁盤來講就是大量的磁盤操做,對於內存來就是變動寫入內存。一般來講集羣中至少有一個節點是寫入磁盤的方式其餘節點宕機致使元數據不能恢復。路由