当前位置: 首页 > 工具软件 > auto-code > 使用案例 >

RabbitMQ 启动报错 Failed to check/redeclare auto-delete queue(s) access to vhost '/' refused for user

钱志义
2023-12-01

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正常运行
 类似资料: