使用 RabbitMQ.Client 連線至 RabbitMQ 出現 BrokerUnreachableException

因為專案需要就開始動手來嘗試各種 MQ 的比較,第一個開始測試的就是 RabbitMQ,原本打算先做幾個基本測試:

  1. 試打訊息進 queue
  2. 讓 RabbitMQ 分派訊息給其他 client
  3. client 正確接受訊息

完成基本測試後就可以紀錄一下過程中使用的工具與方法,想不到第一步就卡住XD 連線一直出現問題,所以第一篇 RabbitMQ 的紀錄文反而是 debug

問題發生原因

RabbitMQ 使用 virtual host 來管理用戶權限,virtual host 可以視為一種 namespace 的概念,預設的 virtual host 是 / ,新增 user 預設不開放存取權限。

確認方式

  1. 登入管理後台:http://localhost:15672/
  2. Admin –> Users –> 檢查 user 是否可以 access 指定的 virtual host

    1useraccess

錯誤訊息

  • 訊息內容

    BrokerUnreachableException: None of the specified endpoints were reachable
    
  • 錯誤截圖

    2errormsg

解決方式

設定 user 有存取指定 virtual hosts 的權限

  • 開啟 RabbitMQ Command Prompt (sbin dir) (安裝 RabbitMQ 時預設裝進來的工具)
  • 設定權限語法

    rabbitmqctl set_permissions -p {virtual host} {userName} "." "." ".*"
    
  • 範例:開放 / 的權限給 yowko

    rabbitmqctl set_permissions -p / yowko "." "." ".*"
    

    3geant

  • 設定完成

    4done

參考資訊

  1. RabbitMQ原理與相關操作(一)