.NET RabbitMQ Client ConnectionFactory 屬性配置

在配置 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 配置直接影響消息隊列的連線穩定性與性能
每一個屬性配置建議依照自身情境或業務需求,進行配置
特別是在分散式系統或高併發場景中,啟用適當的自動恢復與心跳機制,可顯著提升系統的穩定性

訂閱
通知
guest
4 留言
預約回饋
查看所有留言
trackback

ketoconazole cream for Malassezia

ketoconazole cream for Malassezia

trackback
4 數天 之前

minoxidil common issues faq

minoxidil common issues faq

trackback

minoxidil foam vs liquid absorption analysis

minoxidil foam vs liquid absorption analysis

trackback

minoxidil mechanism katp channels

minoxidil mechanism katp channels

string(67) "font-size: 25px; width: 25px; height: 25px;right:10px;bottom:140px;"