前言:在分布式系统里,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;并提供…