解決程序連不上RabbitMQ:Attempting to connect to/access to vhost虛擬主機掛了的排錯與恢復

前言:在分布式系統里,RabbitMQ作為消息中間件,是服務間通信的關鍵紐帶。但實際使用中,程序連接RabbitMQ失敗的情況時有發生。本文結合真實報錯,細致呈現從問題發現到解決的完整排錯思路,還會深入講解RabbitMQ虛擬主機的原理、機制、功能以及權限設置相關知識。

一、報錯現象

程序端報錯

Attempting to connect to: [localhost:5672]
An unexpected connection driver error occurred

RabbitMQ日志報錯

access to vhost 'test_vhost' refused for user 'devefng': vhost 'test_vhost' is down

二、排錯思路

  1. 檢查RabbitMQ進程狀態
    使用 systemctl status rabbitmq-server 命令查看RabbitMQ服務進程狀態。執行命令后,看到進程狀態為“active (running)”,這表明RabbitMQ服務進程本身是正常運行的,排除了進程未啟動導致連接失敗的可能。
  2. 檢查端口監聽情況
    通過 netstat -tulpn | grep 5672(或 ss -tulpn | grep 5672)命令,查看RabbitMQ默認端口 5672 的監聽狀態。命令執行后,能看到 5672 端口處于正常監聽狀態,說明端口沒有被占用,也不是因為端口未開放導致程序連接失敗。
  3. 嘗試重啟RabbitMQ服務
    執行 systemctl restart rabbitmq-server 命令重啟RabbitMQ服務。重啟操作完成后,再次讓程序嘗試連接RabbitMQ,程序依然報連接失敗,這就說明問題不是簡單的服務重啟就能解決的,需要進一步深入排查。
  4. 查看RabbitMQ管理界面與日志
    • 訪問RabbitMQ管理界面(默認地址 http://localhost:15672),在“Admin” -> “Virtual Hosts”頁面中,查看虛擬主機 test_vhost 的狀態,發現其顯示為“down”。
    • 同時,查看RabbitMQ的日志文件(通常位于 /var/log/rabbitmq/ 目錄),日志中明確出現“access to vhost ‘test_vhost’ refused for user ‘devefng’: vhost ‘test_vhost’ is down”的報錯信息。由此最終定位到,是虛擬主機 test_vhost 處于異常(down)狀態,并且該虛擬主機沒有隨著RabbitMQ服務的重啟而正常啟動,進而導致用戶 devefng 無法訪問,程序連接失敗。
      在這里插入圖片描述

三、虛擬主機恢復:命令行操作

步驟1:備份虛擬主機(可選步驟,非生產環境不需要備份)

RabbitMQ提供 rabbitmqadmin 工具用于備份和恢復虛擬主機配置。首先確保 rabbitmqadmin 可執行(若未安裝,可從RabbitMQ管理界面下載),然后執行以下命令備份 test_vhost 虛擬主機的配置到 vhost_backup.json 文件:

rabbitmqadmin -u admin -p admin --vhost=test_vhost export > vhost_backup.json

(注:將用戶名和密碼替換為實際具有管理權限的賬號,這里使用通用的 admin/admin

步驟2:刪除并重建虛擬主機

  • 刪除 test_vhost 虛擬主機:
    rabbitmqctl delete_vhost test_vhost
    
  • 重新創建 test_vhost 虛擬主機:
    rabbitmqctl add_vhost test_vhost
    

步驟3:恢復用戶權限

為用戶 devefng 賦予 test_vhost 虛擬主機的權限,允許對所有資源進行配置、寫入和讀取操作:

rabbitmqctl set_permissions -p test_vhost devefng ".*" ".*" ".*"

步驟4:恢復配置(若備份過)

若之前備份了虛擬主機配置,可通過以下命令恢復:

rabbitmqadmin -u admin -p admin --vhost=test_vhost import < vhost_backup.json

四、虛擬主機恢復:RabbitMQ控制臺操作

  1. 登錄管理界面:打開瀏覽器,訪問 http://localhost:15672,使用管理員賬號(如 admin/admin)登錄。
  2. 刪除虛擬主機:進入“Admin” -> “Virtual Hosts”,找到 test_vhost 虛擬主機,點擊“Delete this virtual host”按鈕刪除。
  3. 創建虛擬主機:點擊“Add a new virtual host”,輸入 test_vhost 后點擊“Add virtual host”創建。
  4. 設置用戶權限
    • 進入 test_vhost 虛擬主機的權限設置頁面。
    • 在“Set permission”區域,選擇用戶 devefng,并在 Configure regexpWrite regexpRead regexp 中都輸入 .*,然后點擊“Set permission”按鈕。
      在這里插入圖片描述

五、RabbitMQ虛擬主機:原理、機制與功能

原理與機制

RabbitMQ的虛擬主機(Virtual Host)是一種邏輯上的隔離機制,相當于一個獨立的消息服務環境。每個虛擬主機有自己的隊列、交換機、綁定關系以及權限設置。不同虛擬主機之間相互隔離,一個虛擬主機內的資源不會被其他虛擬主機訪問到。這種隔離機制使得RabbitMQ可以在一個物理實例上為多個不同的應用或業務場景提供獨立的消息服務,提高了資源的利用率和安全性。

功能

  • 資源隔離:實現隊列、交換機等消息中間件資源的邏輯隔離,不同應用使用不同虛擬主機,避免資源沖突。
  • 權限控制:可以針對每個虛擬主機設置不同的用戶權限,精細化控制用戶對資源的訪問范圍。

六、Permissions與Topic permissions

Permissions(常規權限)

  • 作用:用于設置用戶對虛擬主機內各類資源(如隊列、交換機、綁定關系等)的配置(Configure)、寫入(Write)、讀取(Read)權限。
  • 配置方式:在RabbitMQ管理界面的虛擬主機權限設置區域,選擇用戶,然后分別設置 Configure regexp(匹配可配置資源的正則表達式)、Write regexp(匹配可寫入資源的正則表達式)、Read regexp(匹配可讀取資源的正則表達式),通常填寫 .* 表示允許操作所有資源;也可通過 rabbitmqctl set_permissions 命令進行配置。
  • 應用場景:當需要控制用戶對隊列、交換機等具體資源的管理和操作權限時使用。例如,限制某個用戶只能讀取特定名稱的隊列消息。

Topic permissions(主題權限)

  • 作用:用于設置用戶對虛擬主機內消息交換(Exchange)的基于主題(Topic)的讀寫權限,主要應用于使用主題交換器(Topic Exchange)的場景,通過主題綁定(Topic Binding)決定消息路由。
  • 配置方式:在RabbitMQ管理界面的虛擬主機主題權限設置區域,選擇用戶和交換器,然后設置 Write regexp(匹配可發送消息的主題正則表達式)、Read regexp(匹配可接收消息的主題正則表達式);也可通過相關命令行工具配置。
  • 應用場景:在消息系統中,當消息的發送和接收基于主題進行路由,且需要對不同用戶的主題訪問權限進行細粒度控制時使用。例如,不同服務只允許發送或接收特定主題的消息。

通過以上排錯和配置操作,程序即可正常連接到RabbitMQ的 test_vhost 虛擬主機,恢復消息通信功能。同時,理解虛擬主機和權限的相關知識,也有助于更好地管理和維護RabbitMQ服務。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93039.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

K8S中如何配置PDB(Pod Disruption Budget)

1. PDB 核心概念作用&#xff1a;控制自愿中斷&#xff08;如節點升級、縮容&#xff09;期間&#xff0c;應用的最小可用副本數或最大不可用比例。關鍵參數&#xff1a;minAvailable&#xff1a;必須保持運行的 Pod 數量&#xff08;如 2 或 50%&#xff09;。maxUnavailable&…

從 0 到 1:用 MyCat 打造可水平擴展的 MySQL 分庫分表架構

一、為什么要分庫分表&#xff1f; 單機 MySQL 的極限大致在&#xff1a;維度經驗值單表行數≤ 1 000 萬行&#xff08;B 樹三層&#xff09;單庫磁盤≤ 2 TB&#xff08;SSD&#xff09;單機 QPS≤ 1 萬&#xff08;InnoDB&#xff09;當業務繼續增長&#xff0c;數據量和并發…

電池模組奇異值分解降階模型

了解如何將奇異值分解 (SVD) 降階模型 (ROM) 應用于電池模塊熱模擬。挑戰隨著電池模塊在電動汽車和儲能系統中的重要性日益提升&#xff0c;其熱性能管理也成為一項重大的工程挑戰。高功率密度會產生大量熱量&#xff0c;如果散熱不當&#xff0c;可能導致電池性能下降、性能下…

《Python函數:從入門到精通,一文掌握函數編程精髓》

堅持用 清晰易懂的圖解 代碼語言&#xff0c;讓每個知識點變得簡單&#xff01; &#x1f680;呆頭個人主頁詳情 &#x1f331; 呆頭個人Gitee代碼倉庫 &#x1f4cc; 呆頭詳細專欄系列 座右銘&#xff1a; “不患無位&#xff0c;患所以立。” Python函數&#xff1a;從入門到…

【記錄貼】STM32 I2C 控制 OLED 卡死?根源在 SR1 與 SR2 的讀取操作

問題描述最近在復用以前STM32F407控制OLED的代碼&#xff0c;移植到STM32F103 上&#xff0c;使用硬件 I2C 通信方式。按照常規流程&#xff0c;先發送 OLED 的從機地址&#xff0c;OLED 有正常應答&#xff0c;但當發送第一個控制命令&#xff08;0xAE&#xff09;前的控制字節…

【AI驅動的語義通信:突破比特傳輸的下一代通信范式】

文章目錄1 語義通信簡介1.1 基本概念&#xff1a;什么是語義通信&#xff1f;語義通信的核心目標1.2 基本結構&#xff1a;語義通信系統結構語義通信系統的通用結構組成語義通信系統的結構關鍵模塊1.3 基于大模型的語義通信關鍵技術&#x1f9e0;語義通信系統中AI大模型的設計建…

網絡原理-HTTP

應用層自定義協議自定義協議是指根據特定需求設計的通信規則&#xff0c;用于設備或系統間的數據交換。其核心在于定義數據結構、傳輸方式及處理邏輯。協議結構示例典型的自定義協議包含以下部分&#xff1a;頭部&#xff08;Header&#xff09;&#xff1a;標識協議版本、數據…

ROS配置debug指南

一. 安裝插件 下面的這一個插件過期了需要用下面的這一個插件來替換:二. 設置CMakeLists.txt的編譯模式 set(CMAKE_BUILD_TYPE "Debug") set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAG…

微軟正式將GPT-5接入Microsoft Copilot Studio(國際版)

微軟宣布正式在Microsoft Copilot Studio&#xff08;國際版&#xff09;中集成GPT-5&#xff0c;推動智能體構建能力實現突破性升級。此次更新不僅為企業用戶帶來更高效的響應速度、更精準的語境理解能力&#xff0c;還通過增強的邏輯推理功能&#xff0c;顯著提升了AI交互的深…

微算法科技(NASDAQ:MLGO)通過蟻群算法求解資源分配的全局最優解,實現低能耗的區塊鏈資源分配

隨著區塊鏈網絡規模的不斷擴大和業務需求的日益復雜&#xff0c;資源分配問題逐漸成為制約其發展的關鍵因素之一。傳統的區塊鏈資源分配方法往往存在效率低下、能耗過高、難以達到全局最優解等問題。高能耗不僅增加了運營成本&#xff0c;還對環境造成了較大的壓力。因此&#…

深入淺出JVM:Java虛擬機的探秘之旅

深入淺出JVM&#xff1a;Java虛擬機的探秘之旅一、JVM 初相識&#xff1a;揭開神秘面紗 在 Java 的世界里&#xff0c;JVM&#xff08;Java Virtual Machine&#xff0c;Java 虛擬機&#xff09;就像是一個神秘的幕后大 boss&#xff0c;掌控著 Java 程序運行的方方面面。你可以…

Nginx學習筆記(八)—— Nginx緩存集成

&#x1f5c4;&#x1f5c4; Nginx緩存集成 &#x1f4cc;&#x1f4cc; 一、緩存核心價值 #mermaid-svg-CNji1KUDOsF8MwoY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CNji1KUDOsF8MwoY .error-icon{fill:#5522…

httpx 設置速率控制 limit 時需要注意 timeout 包含 pool 中等待時間

假設通過 httpx.Client 設置 limit 速率控制后&#xff0c;同時發起多個請求訪問 youtube。并且由于科學原因一直連接不上 假設一共 4 個連接&#xff0c;max_connection2&#xff0c;timeout5s。 默認會發生的情況不是前兩個連接 tcp 握手 timeout&#xff0c;后兩個連接再發起…

【網絡】TCP/UDP總結復盤

1.UDP的格式2.TCP的格式3.TCP是來解決什么問題的&#xff1f;答&#xff1a;解決IP層的不可靠傳輸問題&#xff0c;可能數據包丟失、損壞、重復等為上層應用層提高可靠有序的數據傳輸服務通過校驗和、確認應答機制、序列號來解決不可靠傳輸和無序性問題通過流量控制--->>…

Nginx 配置中,root 和 alias 區別

在 Nginx 配置中&#xff0c;root 和 alias 都用于定義文件路徑&#xff0c;但它們的行為有重要區別&#xff0c;特別是 路徑拼接方式 和 末尾斜杠 (/) 的影響。1. root 和 alias 的區別 (1) root 指令 作用&#xff1a;root 會將 location 的 URI 拼接到 root 路徑后面&#x…

基于vue.js的無縫滾動

方法一&#xff1a;基于requestAnimationFrame demo <template><h-page-container class"hoem-page"><h1>無縫滾動</h1><h2>垂直方向</h2><div class"container1"><AutoScroll :data"list" :item-…

【Linux學習|黑馬筆記|Day4】IP地址、主機名、網絡請求、下載、端口、進程管理、主機狀態監控、環境變量、文件的上傳和下載、壓縮和解壓

【DAY4】 今天看的是Linux第四章剩余部分 至此Linux暫時學到這&#xff0c;第五章還包含很多軟件的安裝&#xff0c;但是等我要用的時候再裝吧 我現在只裝了MySQL8.0&#xff0c;具體教程請看筆記安裝教程 內容包含更換鏡像源和安裝配置步驟 文章目錄【DAY4】6&#xff09;IP地…

【合新通信】射頻光纖傳輸模塊詳解

射頻光纖傳輸模塊是一種將射頻(RF)信號通過光纖進行傳輸的關鍵設備&#xff0c;廣泛應用于通信、軍事、廣播電視等領域。以下是關于射頻光纖傳輸模塊的全面介紹&#xff1a;基本原理與組成射頻光纖傳輸模塊主要由以下幾部分組成&#xff1a;電光轉換單元&#xff1a;將輸入的射…

【信息收集】從GET到POST:破解登錄表單的全流程

目標&#xff1a;將瀏覽器數據代理至BP的proxy模塊。將個人PHP的留言板項目首頁登錄數據包代理至BP&#xff0c;并轉發至intrder模塊&#xff0c;進行暴力破解。免責聲明&#xff1a;本文章內容僅用于個人網絡安全知識學習與研究&#xff0c;嚴禁用于任何未經授權的攻擊或非法活…

【辦公自動化】如何使用Python操作PPT和自動化生成PPT?

在現代商業和教育環境中&#xff0c;PowerPoint演示文稿是信息傳遞的重要工具。通過Python自動化PPT創建和編輯過程&#xff0c;可以大幅提高工作效率&#xff0c;特別是在需要批量生成或更新演示文稿的場景下。本文將介紹如何使用python-pptx庫實現PPT自動化&#xff0c;并提供…