RabbitMQ 启动报错 Failed to check/redeclare auto-delete queue(s). access to vhost ‘/’ refused for user ‘rabbit’
今天项目在新的服务器上启动,所有的配置文件没变,安装完rabbitmq配置好以后,启动服务
服务器配置都是一样的,网络也没问题
结果发现报错了 Failed to check/redeclare auto-delete queue(s). 错误如下:
[ERROR] [16:11:34.220] [org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer#0-6122] org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - Failed to check/redeclare auto-delete queue(s).
org.springframework.amqp.AmqpIOException: java.io.IOException
at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:71)
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:387)
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:586)
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1436)
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1417)
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1393)
at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:368)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.redeclareElementsIfNecessary(SimpleMessageListenerContainer.java:1241)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1502)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:378)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:813)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:903)
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:375)
... 8 more
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>(reply-code=530, reply-text=NOT_ALLOWED - access to vhost '/' refused for user 'rabbit_root', class-id=10, method-id=40)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:361)
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:226)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)
... 12 more
-
第一想法 是不是rabbitMQ队列有问题,提示的是检查删除队列除了问题
-
第二想法 往下看报错原因 reply-code=530, reply-text=NOT_ALLOWED - access to vhost ‘/’ refused for user ‘rabbit’
仔细看错误可以看到如下:
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>
(reply-code=530, reply-text=NOT_ALLOWED - access to vhost ‘/’ refused for user ‘rabbit_root’, class-id=10, method-id=40)恍然大悟,这里应该是缺少了一些配置,配置vhost针对用户rabbit的相关权限配置
然后 查了一下,发现 RabbitMQ需要针对用户设置vhost权限
vhost给权限到用户 rabbitmqctl set_permissions -p "/" username ".*" ".*" ".*" 给xiao ming分配test名的vhost权限 rabbitmqctl set_permissions -p "test" xiaoming ".*" ".*" ".*"
重启服务,就可以了,然后发现 RabbitMQ正常运行