解决rabbitmq无法连接导致的错误

本文分享了在使用RabbitMQ过程中遇到的连接失败问题及解决方案,详细介绍了如何通过创建用户、虚拟主机和设置权限来解决连接异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学写项目的时候用到rabbitmq始终无法连接,踩了挺多坑的,希望分享出来,让大家少踩一些.
错误提示是这样的:

org.springframework.amqp.AmqpIOException: java.io.IOException
at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:71) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:476) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:614) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:240) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1797) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1771) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1752) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.actuate.amqp.RabbitHealthIndicator.getVersion(RabbitHealthIndicator.java:48) ~[spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.actuate.amqp.RabbitHealthIndicator.doHealthCheck(RabbitHealthIndicator.java:44) ~[spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:84) ~[spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.actuate.health.CompositeHealthIndicator.health(CompositeHealthIndicator.java:68) [spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.actuate.health.HealthEndpoint.health(HealthEndpoint.java:47) [spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_202]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_202]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_202]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_202]
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:223) [spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:76) [spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:61) [spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.actuate.endpoint.jmx.EndpointMBean.invoke(EndpointMBean.java:104) [spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.actuate.endpoint.jmx.EndpointMBean.invoke(EndpointMBean.java:93) [spring-boot-actuator-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) [na:1.8.0_202]
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) [na:1.8.0_202]
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468) [na:1.8.0_202]
at javax.management.remote.rmi.RMIConnectionImpl.access300(RMIConnectionImpl.java:76)[na:1.8.0202]atjavax.management.remote.rmi.RMIConnectionImpl300(RMIConnectionImpl.java:76) [na:1.8.0_202] at javax.management.remote.rmi.RMIConnectionImpl300(RMIConnectionImpl.java:76)[na:1.8.0202]atjavax.management.remote.rmi.RMIConnectionImplPrivilegedOperation.run(RMIConnectionImpl.java:1309) [na:1.8.0_202]
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) [na:1.8.0_202]
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) [na:1.8.0_202]
at sun.reflect.GeneratedMethodAccessor112.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_202]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_202]
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) [na:1.8.0_202]
at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_202]
at sun.rmi.transport.Transport1.run(Transport.java:197)[na:1.8.0202]atjava.security.AccessController.doPrivileged(NativeMethod)[na:1.8.0202]atsun.rmi.transport.Transport.serviceCall(Transport.java:196)[na:1.8.0202]atsun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)[na:1.8.0202]atsun.rmi.transport.tcp.TCPTransport1.run(Transport.java:197) [na:1.8.0_202] at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_202] at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_202] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) [na:1.8.0_202] at sun.rmi.transport.tcp.TCPTransport1.run(Transport.java:197)[na:1.8.0202]atjava.security.AccessController.doPrivileged(NativeMethod)[na:1.8.0202]atsun.rmi.transport.Transport.serviceCall(Transport.java:196)[na:1.8.0202]atsun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)[na:1.8.0202]atsun.rmi.transport.tcp.TCPTransportConnectionHandler.run0(TCPTransport.java:834) [na:1.8.0_202]
at sun.rmi.transport.tcp.TCPTransportConnectionHandler.lambdaConnectionHandler.lambdaConnectionHandler.lambdarun0(TCPTransport.java:688)[na:1.8.0202]atjava.security.AccessController.doPrivileged(NativeMethod)[na:1.8.0202]atsun.rmi.transport.tcp.TCPTransport0(TCPTransport.java:688) [na:1.8.0_202] at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_202] at sun.rmi.transport.tcp.TCPTransport0(TCPTransport.java:688)[na:1.8.0202]atjava.security.AccessController.doPrivileged(NativeMethod)[na:1.8.0202]atsun.rmi.transport.tcp.TCPTransportConnectionHandler.run(TCPTransport.java:687) [na:1.8.0_202]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_202]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_202]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_202]

这是因为我们并没有创建出用户
首先打开rabbitmq界面add User 创建用户
rabbitmq界面
有了用户之后是no access

在这里插入图片描述

点击右边的virtual hosts 咱们新建一个virtual host
在这里插入图片描述
如图 我们设置User 然后Set Permission
这里我们直接设置为超级管理员了
(权限分为超级管理原,监控者,policymaker,普通管理员和只能产生生产者和消费者普通用户)
当发现current permissions有了你的权限再尝试连接就ok拉~
在这里插入图片描述

<think>我们正在解决RabbitMQ在Windows上连接被拒绝的问题。根据引用[1]的内容,我们知道一个常见的原因是.erlang.cookie文件不一致。RabbitMQ使用这个cookie文件进行节点间的认证,如果客户端和服务器端的cookie不一致,就会导致连接被拒绝。 根据引用[1]的步骤,我们需要: 1. 修改两个.erlang.cookie文件,使它们一致。 2. 如果修改后仍然不行,可以尝试卸载重装。 具体操作步骤: 第一步:找到两个.erlang.cookie文件的位置。 - 一个位于RabbitMQ服务器的安装目录(通常是C:\Program Files\RabbitMQ Server\rabbitmq_server-版本号)下的.erlang.cookie。 - 另一个位于当前用户的主目录(例如C:\Users\你的用户名)下的.erlang.cookie。 第二步:确保这两个文件的内容完全一致。注意,这个文件是一个隐藏文件,所以需要在文件资源管理器中设置显示隐藏文件才能看到。 第三步:修改后,需要重启RabbitMQ服务。可以通过服务管理器(services.msc)重启RabbitMQ服务,或者以管理员身份运行命令提示符执行: net stop RabbitMQ && net start RabbitMQ 第四步:如果问题仍然存在,可以尝试卸载并重新安装RabbitMQ。 此外,还有其他可能的原因导致连接被拒绝,例如: - RabbitMQ服务没有启动。检查服务是否正在运行。 - 防火墙设置阻止了连接RabbitMQ默认使用端口5672(AMQP)和15672(管理插件)。确保这些端口在防火墙中是开放的。 - 主机名解析问题。尝试使用127.0.0.1代替主机名进行连接。 如果以上方法都不能解决问题,可以查看RabbitMQ的日志文件以获取更多信息。日志文件通常位于%APPDATA%\RabbitMQ\log目录下。 现在,我们生成相关问题:</think>### RabbitMQ Windows 连接被拒绝的解决方法 当在 Windows 上连接 RabbitMQ 时出现"主动拒绝连接"错误,通常由以下原因引起: #### 1. **检查 RabbitMQ 服务状态** ```bash sc query RabbitMQ ``` - 若状态非 `RUNNING`,手动启动服务: ```bash net start RabbitMQ ``` - 若服务缺失,需重新安装 Erlang 和 RabbitMQ(注意版本兼容性)[^1] #### 2. **验证 .erlang.cookie 一致性** - 找到两个关键文件: - `C:\Windows\.erlang.cookie` - `C:\Users\<用户名>\.erlang.cookie` - 确保两文件内容**完全相同**(建议复制系统文件到用户目录) - 修改后重启服务: ```bash net stop RabbitMQ && net start RabbitMQ ``` #### 3. **检查端口访问** - 默认端口:`5672`(AMQP)/`15672`(管理界面) - 测试端口连通性: ```bash telnet localhost 5672 ``` - 若不通,检查防火墙设置: ```powershell New-NetFirewallRule -DisplayName "RabbitMQ" -Direction Inbound -LocalPort 5672,15672 -Protocol TCP -Action Allow ``` #### 4. **验证插件状态** ```bash rabbitmq-plugins.bat enable rabbitmq_management rabbitmq-service.bat stop rabbitmq-service.bat install rabbitmq-service.bat start ``` #### 5. **检查主机绑定** - 编辑配置文件 `%APPDATA%\RabbitMQ\rabbitmq.conf`: ```ini listeners.tcp.default = 0.0.0.0:5672 management.tcp.port = 15672 ``` #### 6. **查看日志定位问题** ```bash rabbitmqctl.bat status ``` - 日志路径:`%APPDATA%\RabbitMQ\log\rabbit@<hostname>.log` > **关键提示**:完成上述操作后,建议重启计算机使配置生效。若使用 Docker 或 WSL,需额外检查网络桥接配置[^1]。 --- ### 相关问题 1. RabbitMQ.erlang.cookie 文件权限错误如何修复? 2. Windows 环境下如何永久配置 RabbitMQ 的防火墙规则? 3. RabbitMQ 服务启动失败时有哪些诊断命令? 4. 如何验证 RabbitMQ 不同端口(AMQP/HTTP/STOMP)的连通性? 5. RabbitMQ 集群部署时出现节点连接拒绝的可能原因? [^1]: 引用自 RabbitMQ Windows 连接问题分析文档
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值