RabbitMQ集群的優(yōu)點
1.允許消費者和生產者在RabbitMQ節(jié)點崩潰的情況下進行
2.通過添加更多節(jié)點來線性擴展消息通信的吞吐量
RabbitMQ始終記錄以下四種類型的內部元數(shù)據(jù)
1.隊列元數(shù)據(jù):隊列名稱和它們的屬性(是否可持久化,是否自動刪除)
2.交換器元數(shù)據(jù):交換器名稱袋励、類型侥蒙、屬性(是否持久化)
3.綁定元數(shù)據(jù):一張表格,展示如何將消息路由到隊列
4.vhost元數(shù)據(jù):vhost內的隊列、交換器和綁定提供命名空間和安全屬性
集群架構
1.單一節(jié)點的RabbitMQ會將所有的內部元數(shù)據(jù)存儲在內存中,同時,將標記為可持久化的隊列和交換器以及它們的綁定存儲在硬盤上
2.引入RabbitMQ集群后:RabbitMQ需要追蹤新的元數(shù)據(jù)滑负,即集群節(jié)點位置、以及節(jié)點與已記錄的其他類型元數(shù)據(jù)的關系
3.在RabbitMQ集群中可以選擇將元數(shù)據(jù)存儲至磁盤中或者存儲在RAM中
集群中的隊列
1.不是每一個節(jié)點都有所有隊列的完全拷貝
2.隊列的信息(元數(shù)據(jù)用含、狀態(tài)和內容)只會存在于其所有者的單節(jié)點而不會在其他非所有者的節(jié)點中存在
3.非所有者的節(jié)點只知道隊列的元數(shù)據(jù)和指向該隊列的所有信息的指針矮慕。
4.當集群節(jié)點崩潰時,該節(jié)點的隊列和關聯(lián)的綁定就會消失耕餐。
RabbitMQ不將隊列內容和狀態(tài)復制到所有節(jié)點的原因
1.存儲空間
2.性能:消息的發(fā)布需要將消息復制到備一個集群節(jié)點凡傅。對于持久化的消息來說,每條消息都會觸發(fā)磁盤活動肠缔。沒新增一個節(jié)點網絡和磁盤的負載都會增加。
分布交換器
1.交換器只是一張查詢報哼转,是名稱和隊列的綁定表明未,不是實際上的消息路由器,信道才是實際的消息路由器
2.創(chuàng)建一個新的交換機壹蔓,會在集群的所有節(jié)點上復制一份趟妥,所以每個節(jié)點都可訪問到新的交換器
3.當消息已經發(fā)布,在路由完成之前節(jié)點故障可以通過“事務”或者“發(fā)送方確認”機制保證數(shù)據(jù)不丟失
節(jié)點類型
1.在RabbitMQ中佣蓉,節(jié)點要么是內存節(jié)點披摄,要么是磁盤節(jié)點
2.內存節(jié)點:將所有的隊列、交換器勇凭、綁定疚膊、用戶、權限和vhost元數(shù)據(jù)定義都為僅存儲在內存中
3.磁盤節(jié)點:將元數(shù)據(jù)存儲在磁盤中
4.單節(jié)點應用智能是磁盤節(jié)點虾标,否則每次重啟后寓盗,節(jié)點的配置都會消失
5.RabbbitMQ集群中至少有一個磁盤節(jié)點,其他節(jié)點都可以為內存節(jié)點;磁盤節(jié)點保證集群配置免于重啟傀蚌,內存節(jié)點保證性能基显。
鏡像隊列和保留消息
1.由于RabbitMQ不會將隊列復制到所有節(jié)點,所以我們可以使用RabbitMQ提供的鏡像概念去為隊列去創(chuàng)建一個鏡像隊列善炫,鏡像隊列會有一個主拷貝撩幽,這個主拷貝僅存在一個節(jié)點上(主隊列);鏡像節(jié)點在集群中的其他節(jié)點有從拷貝(從隊列)箩艺。