很重要的前提:
首先查看服务器对应的端口是否开放,如15672和5672,是否添加入站规则
问题描述:采用guest可以连接访问rabbitmq,使用其他账户连接rabbitmq失败(其他账户均已经分配虚拟机和权限,并且可以登录管理页面,说明账号密码没有错误)
报错截图如下
2021-05-13 09:11:28.605 INFO 39320 --- [ main] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [118.192.69.111:5672]
2021-05-13 09:11:28.880 INFO 39320 --- [ main] o.s.a.r.l.SimpleMessageListenerContainer : Broker not available; cannot force queue declarations during start: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
2021-05-13 09:11:28.880 ERROR 39320 --- [192.69.111:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured
java.net.SocketException: Socket Closed
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_11]
at java.net.SocketInputStream.read(SocketInputStream.java:150) ~[na:1.8.0_11]
at java.net.SocketInputStream.read(SocketInputStream.java:121) ~[na:1.8.0_11]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_11]
at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_11]
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_11]
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.10.0.jar:5.10.0]
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:184) ~[amqp-client-5.10.0.jar:5.10.0]
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:665) ~[amqp-client-5.10.0.jar:5.10.0]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11]
2021-05-13 09:11:28.880 INFO 39320 --- [ntContainer#0-1] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [118.192.69.111:5672]
2021-05-13 09:11:29.134 ERROR 39320 --- [192.69.111:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured
java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_11]
at java.net.SocketInputStream.read(SocketInputStream.java:150) ~[na:1.8.0_11]
at java.net.SocketInputStream.read(SocketInputStream.java:121) ~[na:1.8.0_11]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_11]
at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_11]
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_11]
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.10.0.jar:5.10.0]
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:184) ~[amqp-client-5.10.0.jar:5.10.0]
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:665) ~[amqp-client-5.10.0.jar:5.10.0]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11]
2021-05-13 09:11:29.134 ERROR 39320 --- [ntContainer#0-1] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s).
org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:64) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:602) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:724) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:216) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2132) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2105) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2085) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueInfo(RabbitAdmin.java:407) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:391) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.attemptDeclarations(AbstractMessageListenerContainer.java:1890) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.redeclareElementsIfNecessary(AbstractMessageListenerContainer.java:1871) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.initialize(SimpleMessageListenerContainer.java:1346) [spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1192) [spring-rabbit-2.3.6.jar:2.3.6]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11]
Caused by: 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:385) ~[amqp-client-5.10.0.jar:5.10.0]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1139) ~[amqp-client-5.10.0.jar:5.10.0]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1087) ~[amqp-client-5.10.0.jar:5.10.0]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connectAddresses(AbstractConnectionFactory.java:638) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connect(AbstractConnectionFactory.java:613) ~[spring-rabbit-2.3.6.jar:2.3.6]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:565) ~[spring-rabbit-2.3.6.jar:2.3.6]
... 12 common frames omitted
好了,开始面向百度解决:
第一种说法:
有的说是spring.rabbitmq.connection-timeout 设置过小,导致连接超时,未建立连接
解决办法是把改参数的值该大一点
直接把它设置为0,0表示永远等待,即连接永不超时。
报错依旧!!!
第二种说法:
说spring boot配置文件的virtual-host和rabbitMQ上的不一致
重新给admin账号创建一个名为myHost的virtual-host,并在spring boot的配置文件中进行添加,如图
spring boot 配置文件
rabbitmq管理页面
报错依旧!!!
第三种说法:
当前使用的版本和spring boot 版本不匹配,把pom中对rabbitmq依赖的版本改成和spring boot 对应的版本,比如说我安装的rabbitmq是3.6.15版本,查了下是17年左右发布的,当时springboot还是1.5.x版本,然后把依赖换成1.5.10release版本
如图:
spring boot 版本
目前我使用的spring boot 版本是2.4.4,目前最新的也就到就2.4.5而已,而我使用的rabbit也是3.8.14,离最新的3.8.16版本相隔时间也不到一个月的时间,而且在本地是可以完全使用的,只不过连接远程服务不得而已,所以版本的问题完全可以排除。
image.png
rabbitmq版本
问题依旧!!!
第四种说法:
将连接端口进行修改,即将5672修改成其他端口,如5673
spring boot rabbitMQ连接端口修改
image.png
问题依旧!!!
其实没有必要在配置文件中在另外添加端口监听,因为在配置文件中有这么一句
By default, RabbitMQ will listen on all interfaces, using
the standard (reserved) AMQP port.
最终解决:
最后看到一篇博客,才找到了原因,他是通过命令的方式添加用户分配虚拟机和权限
rabbitmqctl add_user username passwd //添加用户,后面两个参数分别是用户名和密码
rabbitmqctl set_permissions -p / username ".*" ".*" ".*" //添加权限
rabbitmqctl set_user_tags username administrator //修改用户角色,将用户设为管理员
我抱着不可能的心态直接Ctrl+C Ctrl+V ,结果居然成功的连接上了
经过排查,是原来我设置密码的时候,都是用了数字,后面修改就得了
真是蛋疼的操作!!!!