以前rabbitmq學習與實踐分享(2)中主要談到了rabbitmq提供的一些手段和機制來從生產端,消費端以及broker端保證消息機制的可靠性。可是沒有考慮到單點故障以及broker如何抗住高負載,來保證消息中間件的高可用性。本文主要結合本身的理解談論這個問題。node
rabbitmq 提供高可用性的機制主要有如下2種手段:app
rabbitmq 的集羣有如下幾個特色:運維
rabbitmq 集羣中建立隊列,只會在單個節點,而不是全部節點上建立隊列的進程幷包含隊列的完整消息(元數據,狀態,內容)。建立隊列進程的節點稱爲宿主節點,該節點知道隊列的全部信息,其餘的節點僅僅知道隊列的元數據信息以及包含指向這個宿主節點的指針。 因此若是這個宿主節點因某種緣由出現宕機時,該節點中的消息會丟失。固然後面介紹的鏡像隊列能夠解決這種狀況出現的消息丟失問題。學習
rabbitmq集羣的搭建過程偏運維,此處就不作介紹了,涉及到相關的命令以下:spa
鏡像隊列的機制主要做用就是經過冗餘隊列中的消息,來避免集羣中宿主隊列宕機時致使的消息丟失問題。引入鏡像隊列機制,經過將隊列鏡像到其餘的broker節點上,對一個宿主隊列(master)配置多個slave節點,從而提高可用性。指針
針對鏡像隊列而言:全部的操做(除了消息發送)都是先應用到隊列的主節點,而後經過主節點傳播到鏡像隊列的從節點的,當主節點宕機時,最老的從節點會自動晉升成爲新的主節點.
鏡像隊列的配置是經過policy 設置的:
rabbitmqctl set_policy -p vhost [ --priority priority ] [--apply-to apply-to] name pattern {definition}
複製代碼
參數簡要介紹:pattern 指要匹配的隊列模式 definition 包含3個部分:code
本文主要簡要的介紹了一下rabbitmq 如何提高可用性來保證消息不丟失的。可是在實際生產環境,面對突發的流量的時候,rabbitmq 如何能扛住呢,有沒有什麼機制能夠實現呢,好比流控? 這塊內容在下一小節繼續分享。cdn