當前位置:編程學習大全網 - 源碼下載 - RabbitMQ-消息堆積&高可用

RabbitMQ-消息堆積&高可用

前置文章:

RabbitMQ-消息可靠性&延遲消息

壹、MQ常見問題

二、消息堆積-惰性隊列

1、消息堆積問題

2、解決消息堆積方法

3、惰性隊列

三、高可用-MQ集群

1、集群分類

2、普通集群

3、鏡像集群

4、沖裁隊列

確保發送的消息至少被消費壹次;

實現消息的延遲投遞;

處理消息無法及時消費的問題;

避免單點MQ故障導致整體不可用;

1、消息堆積問題

當生產者發送消息的速度超過了消費者處理消息的速度,就會導致隊列中的消息堆積,直到隊列存儲消息達到上限。最早接收到的消息,可能就會 成為死信 ,會 被丟棄 ,這就是消息堆積問題。

2、解決消息堆積方法

3、惰性隊列

從RabbitMQ的3.6.0版本開始,就增加了Lazy Queues的概念,也就是惰性隊列。

Ⅰ 接收到消息後直接 存入磁盤 而非內存;

Ⅱ 消費者要消費消息時才會 從磁盤中讀取 並加載到內存;

Ⅲ 支持 數百萬條 的消息存儲。

要設置壹個隊列為惰性隊列,只需要在聲明隊列時,指定x-queue-mode屬性為lazy即可。

Ⅰ 可以通過命令行將壹個運行中的隊列修改為惰性隊列,如下:

rabbitmqctl set_policy Lazy "^lazy-queue$" '{"queue-mode":"lazy"}' --apply-to queues

Ⅱ 用SpringAMQP聲明惰性隊列,如下:

@Bean註解的形式,如下:

@RabbitListener註解的形式,如下:

Ⅰ 優點

基於磁盤存儲,消息上限高;

沒有間歇性的page-out,性能比較穩定;

Ⅱ 缺點

基於磁盤存儲,消息時效性會降低;

性能受限於磁盤的IO。

官方文檔: Clustering Guide — RabbitMQ 。

1、集群分類

是壹種 分布式集群 ,將隊列分散到集群的各個節點,從而提高整個集群的並發能力。

是壹種 主從集群 ,普通集群的基礎上,添加了主從備份功能,提高集群的數據可用性。

註意:鏡像集群雖然支持主從,但主從同步並不是強壹致的,某些情況下可能有數據丟失的風險。

在RabbitMQ的3.8版本以後推出的,底層采用Raft協議確保主從的數據壹致性。

2、普通集群

Ⅰ 會在集群的各個節點間***享部分數據,包括:交換機、隊列元信息。不包含隊列中的消息;

Ⅱ 當訪問集群某節點時,如果隊列不在該節點,會從數據所在節點傳遞到當前節點並返回;

Ⅲ 隊列所在節點宕機,隊列中的消息就會丟失。

Ⅰ 獲取Cookie

RabbitMQ底層依賴於Erlang,而Erlang虛擬機就是壹個面向分布式的語言,默認就支持集群模式。集群模式中的每個RabbitMQ 節點使用 cookie 來確定它們是否被允許相互通信。

要使兩個節點能夠通信,它們必須具有相同的***享秘密,稱為 Erlang cookie 。cookie 只是壹串最多 255 個字符的字母數字字符。

每個集群節點必須具有 相同的 cookie 。實例之間也需要它來相互通信。

首先獲取Cookie,指令如下:

其中 YYNCLCJEKVNUFYQFPNZH 這壹串就是生成的Cookie,如下:

Ⅱ 刪除現有mq容器

Ⅲ 準備rabbitmq.conf配置文件

此處選擇在tmp目錄下創建,如下:

配置文件內容如下:

Ⅳ 準備Cookie記錄文件

Ⅴ 準備集群目錄

Ⅵ 拷貝配置文件、Cookie文件到目錄

echo :用於字符串的輸出,輸出字符串到 | 後面;

-t :表示先打印命令,再執行;

-n 1 :表示執行命令時用的args個數為1個。

Ⅶ 創建集群網絡

Ⅷ 運行容器

集群中的節點標示默認都是: rabbit@[hostname] 。

Ⅰ 往rabbit@mq1添加隊列

在mq2、mq3中也可以查看到該隊列,因為元信息***享。

Ⅱ 往simple.queue添加數據

在mq2、mq3中可以查看到消息,如下:

Ⅲ 讓mq1宕機

mq2、mq3無法讀取到數據,因為只***享元信息,沒有同步備份數據,如下:

3、鏡像集群

鏡像集群官方文檔: Classic Queue Mirroring — RabbitMQ 。

普通集群不具備高可用的特性,使用鏡像集群可以解決這個問題。

Ⅰ 鏡像隊列結構是壹主多從(從就是鏡像);

Ⅱ 所有操作都是主節點完成,然後同步給鏡像節點;

Ⅲ 主宕機後,鏡像節點會替代成新的主(如果在主從同步完成前,主就已經宕機,可能出現數據丟失);

Ⅳ 不具備負載均衡功能,因為所有操作都會有主節點完成(但是不同隊列,其主節點可以不同,可以利用這個提高吞吐量)。

Ⅰ 設置exactly模式

Ⅱ 創建隊列

Ⅲ 發送消息

Ⅳ 讓mq1宕機

註意:mq1恢復後,該隊列的主節點仍然為mq3。

4、沖裁隊列

Ⅰ 與鏡像隊列壹樣,都是主從模式,支持主從數據同步;

Ⅱ 使用非常簡單,沒有復雜的配置;

Ⅲ 主從同步基於Raft協議,強壹致。

註意:仲裁隊列是3.8版本以後才有的新功能。

+2表示有2個鏡像節點,仲裁隊列默認鏡像數為5,集群節點不足5則都是鏡像。

@Bean註解配置

修改配置文件

以上即為RabbitMQ-消息堆積&高可用的全部內容,感謝閱讀。

  • 上一篇:壹個數的原碼,反碼,補碼怎麽算
  • 下一篇:開辦壹個網站都需要哪些程序?
  • copyright 2024編程學習大全網