更新时间:2024-10-29 GMT+08:00

RabbitMQ客户端连接报错原因分析

RabbitMQ客户端连接失败,可能原因包括地址填错、端口填错、用户名或者密码填错、超过最大连接数、未创建Vhost或者填错Vhost名称。

可能原因一:连接地址不正确

VPC内访问场景下,连接地址不正确时,报错如下:

[root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.125.110 5672 user *******
Exception in thread "main" java.net.NoRouteToHostException: No route to host (Host unreachable)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)

公网访问场景下,连接地址不正确时,报错如下:

[root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 139.xxx.178 5672 user *******
Exception in thread "main" java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)

解决方法:在RabbitMQ控制台的“基本信息”页面,获取“内网连接地址”/“公网连接地址”,修改连接实例代码中的连接地址。

可能原因二:端口不正确

VPC内访问场景下,端口不正确时,报错如下:

[root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.125.111 5673 user *******
Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)

公网访问场景下,端口不正确时,报错如下:

[root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 139.xxx.179 5673 user *******
Exception in thread "main" java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)

解决方法:修改端口号。

可能原因三:用户名或密码错误

报错如下:

[root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.125.111 5672 user *******
Exception in thread "main" com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details
 see the broker logfile.
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:351)
at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:64)

解决方法:修改用户名或密码。如果忘记密码,参考重置实例密码,重置密码。

可能原因四:超过最大连接数

报错如下:

解决方法:减少连接数,关闭不使用的连接。

可能原因五:未创建Vhost或者填错Vhost名称

报错如下:

Couldn't log in: server connection error 530, message: NOT_ALLOWED - vhost /localdev/ not found

解决方法:

  • 如果未创建Vhost,进入RabbitMQ控制台的“Vhost列表”页面,创建Vhost。
  • 如果是Vhost名称填错了,请参考RabbitMQ控制台的“Vhost列表”页面显示的Vhost名称,修改连接URL和配置文件。