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和配置文件。