在配置 RabbitMQ Client 端時,可以透過 ConnectionFactory 設定多種屬性來控制連線行為
本篇將逐一說明 RabbitMQ 連線 ConnectionFactory 每個屬性用途
基本配置
HostName:RabbitMQ 伺服器主機名稱或 IP 地址
Port:RabbitMQ 連接埠號 (預設: 5672)
UserName:帳號
Password:密碼
VirtualHost (預設: /)
功能
VirtualHost 可想像成是 RabbitMQ 中的「命名空間」
目的是分隔不同的消息隊列,達到隔離資源、提升安全性
必須搭配Server端配置名稱,所以不能隨便亂輸入
應用
最常的應用就是實現多租戶架構或是多環境架構,例如:
- 測試環境使用 test_vhost
- 生產環境使用 prod_vhost
每個 VirtualHost 是一個邏輯隔離的環境,擁有自己獨立的隊列、交換機、綁定及許可權
RabbitMQ 管理員可以為每個 VirtualHost 配置資源限制(如:連接數、內存、磁碟使用量),以避免單個環境或租戶過度使用系統資源
AutomaticRecoveryEnabled (自動重連機制)
功能
當 RabbitMQ 與客戶端的連線因網絡問題或伺服器故障中斷時
啟用該屬性可以讓客戶端自動嘗試重新連線,無需手動干預
相依屬性
NetworkRecoveryInterval:可配置重試間隔秒數 (預設為 5 秒)
注意事項
若未啟動該屬性,自動重連機制將無效
NetworkRecoveryInterval (自動恢復連線時的重試間隔秒數)
功能
當啟用了 AutomaticRecoveryEnabled 後,NetworkRecoveryInterval 決定了重試連線的間隔秒數
相依屬性
AutomaticRecoveryEnabled 屬性需啟動,該配置才有作用
RequestedHeartbeat (心跳機制)
功能
客戶端和伺服器之間的一個協議層機制,用於檢測連線的健康狀態
其主要功能是通過定期交換心跳信號(heartbeat frame),確認雙方仍然可用並保持連接
若在指定時間內未收到心跳信號,則判定連接已中斷
注意事項
心跳間隔時間由最小值決定,若伺服器配置為 15 秒,客戶端配置為 5 秒,最終採用 5 秒
若設置為 0,則禁用心跳機制(不建議)
相依屬性
必須啟用 AutomaticRecoveryEnabled,該配置才會生效
DispatchConsumersAsync (非同步的訊息分派給消費者)
功能
控制是否以非同步方式分派消息給消費者
當設置為 true 時,可使用基於 async/await 的非同步消息處理邏輯
適合處理 I/O 密集型操作,例如: 調用外部 API 或查詢資料庫
TopologyRecoveryEnabled 自動拓撲恢復
功能
拓撲 (Topology) 包括:佇列(Queue)、交換器(Exchange)、綁定(Binding)
啟用該屬性後,RabbitMQ 會在連線恢復後,自動重建之前的佇列、交換器及綁定關係
選項
true:自動重建拓撲,讓系統快速恢復正常運作
false:需手動重建拓撲,適合自定義拓撲行為的場景
相依屬性
必須啟用 AutomaticRecoveryEnabled,該配置才會生效
RabbitMQ ConnectionFactory 配置直接影響消息隊列的連線穩定性與性能
每一個屬性配置建議依照自身情境或業務需求,進行配置
特別是在分散式系統或高併發場景中,啟用適當的自動恢復與心跳機制,可顯著提升系統的穩定性