C 佇列學習筆記 RabbitMQ搭建集群

2022-03-01 20:10:12 字數 2668 閱讀 8298

假設有兩台伺服器:

注意事項:

1)所有伺服器的erlang及rabbitmq版本必須一樣。

2)伺服器名大小寫敏感。

2.1、設定hosts檔案

路徑如下:c:\windows\system32\drivers\etc

2.2、開啟集群埠

假如您的主機及備機都沒有開啟防火牆,2.2可以略過;若開啟了防火牆,需要在開啟了防火牆的伺服器上的入站規則中新增以下3個埠:

1)15672是管理介面使用的埠;

2)25672是集群之間使用的埠;

3)4369是erlang程序epmd用來做node連線的埠。

下面以建15672埠為例,其它的原理是一樣的:

2.2.1、控制面板\所有控制面板項\windows 防火牆->高階設定->入站規則。

2.2.2、右鍵新建規則->選擇埠->下一步。

2.2.3、在特定本地埠中輸入埠號15672->下一步。

2.2.4、下一步。

2.2.5、下一步。

2.2.6、輸入名稱,如15672->完成。

3、設定cookie

由於rabbitmq的集群是依附於erlang的集群來工作的,所以必須先構建起erlang的集群映象。erlang的集群中各節點是經由過程乙個magic cookie來實現的,這個cookie存放在c:\users\管理員使用者\.erlang.cookie中(如本機使用的是administartor使用者,存放的路徑在於c:\users\administartor\.erlang.cookie中),另外在windows系統中,在c:\windows目錄下也有乙個.erlang.cookie(不同版本存放的路徑略有不同,3.8.3版本存放的路徑在於c:\windows\system32\config\systemprofile下),兩個是一樣的,各個節點的這兩個檔案必須要保持一致。

3.1、複製主機cx168下的.erlang.cookie檔案,將備機cx165中的兩個.erlang.cookie檔案替換掉。

3.2、主機及備機的rabbitmq服務都分別重啟一下。

4、加入集群

在備機的rabbitmq command prompt (sbin dir)中,執行以下命令:

rabbitmqctl reset

rabbitmqctl join_cluster rabbit@cx168 --ram

注:上面是將備機cx165新增到主機cx168集群中,備機是以ram節點的方式加入。假如想改成disc節點,可以使用以下命令修改:

rabbitmqctl change_cluster_node_type --disc

5、檢視集群資訊

現在登入一下備機cx165的管理介面(如下圖),可以看到:

1)右上角的集群已經由cx165變成了cx168;

2)節點nodes出現了主機cx168及備機cx165;

3)主機cx168上的資訊已全部同步到備機cx165,如使用者資訊等。

也可以使用命令檢視集群資訊:

rabbitmqctl cluster_status
6、集群注意事項

1)集群中至少要有乙個disc型別的節點,這樣關於集群的配置才是有效的;

2)僅當集群中disc型別的節點處於執行狀態時,對集群相關配置的修改才是有效的(disc代表磁碟節點,ram代表記憶體節點);

3)集群在執行時,如果disc節點突然宕掉,此時其它的ram節點仍然能夠繼續提供服務,但若此時所有的ram節點也都宕掉,則在disc節點未啟動的情況下,ram節點無法啟動,因為所有的配置都儲存在disc節點下面,啟動時,需要從該型別節點讀取對應的配置。

4)rabbitmq集群中,節點之間的exchange是在各個節點都有乙份的,但是訊息佇列queue只存在對應的接收節點上面,其它節點不儲存。如果該接收節點宕掉,那麼接收到的訊息佇列可能會丟失。

7、 集群其它命令

7.1、退出集群

rabbitmqctl reset

C 佇列學習筆記 RabbitMQ優先順序佇列

在具體業務中可能會遇到一些要提前處理的訊息,比如普通客戶的訊息按先進先出的順序處理,vip客戶的訊息要提前處理。在rabbitmq中,訊息優先順序的實現方式是 在宣告queue時設定佇列的x max priority屬性,然後在publish訊息時,設定訊息的優先順序即可。rabbitmq優先順序佇...

訊息佇列RabbitMQ學習筆記之簡單的訊息收發

佇列名稱 final string queue name rabbitmq test connection是socket連線的抽象,並且為我們管理協議版本協商 protocol version negotiation 認證 authentication 等等事情。connectionfactory ...

c 學習筆記 佇列

標頭檔案 include 定義 queue typename name typename為任意資料型別,name為所定義佇列名常用函式 函式名返回值q.empty 判斷佇列是否為空 q.size 返回當前佇列元素個數 q.pop 刪除隊首元素 q.push x 向隊尾新增元素 q.front 返回隊...