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