You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RabbitMQ ACCESS_REFUSED认证失败问题求助

问题:Spring Boot连接K8s部署的RabbitMQ本地认证失败

本人使用Spring Boot Java代码连接本地Kubernetes+Docker部署的RabbitMQ,昨日连接正常且同事可正常访问,但本地出现认证失败异常。此前STS 4.17.0出现无响应问题,已新建工作区并重新下载STS。通过抓包确认凭证已传递,该用户具备权限,但RabbitMQ日志无相关记录。同时怀疑属性加载存在竞态条件,偶尔会出现连接建立前属性未加载的情况。

异常信息

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.16.0.jar:5.16.0]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1225) ~[amqp-client-5.16.0.jar:5.16.0]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1173) ~[amqp-client-5.16.0.jar:5.16.0]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1342) ~[amqp-client-5.16.0.jar:5.16.0]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connectHostPort(AbstractConnectionFactory.java:638) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connect(AbstractConnectionFactory.java:603) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:550) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:686) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:257) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$RabbitResourceFactory.createConnection(ConnectionFactoryUtils.java:345) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:140) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:102) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:85) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:613) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.initialize(SimpleMessageListenerContainer.java:1378) ~[spring-rabbit-3.0.0.jar:3.0.0]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1223) ~[spring-rabbit-3.0.0.jar:3.0.0]
at java.lang.Thread.run(Thread.java:833) ~[?:?]

相关配置代码

ConnectionFactories配置类

@Configuration
public class ConnectionFactories {

private static Logger logger = LoggerFactory.getLogger(ConnectionFactories.class);

@Autowired
private AmqpSettings settings;

@Autowired
private QueueSettings queueSettings;

private CachingConnectionFactory makeConnectionFactory(String host, int port, String username, String password,
        String virtualHost) throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, CertificateException,
        FileNotFoundException, IOException {
    RabbitConnectionFactoryBean rabbitCF = new RabbitConnectionFactoryBean();
    rabbitCF.setHost(host);
    rabbitCF.setPort(port);
    rabbitCF.setUsername(username);
    rabbitCF.setPassword(password);
    rabbitCF.setVirtualHost(virtualHost);
    return new CachingConnectionFactory(rabbitCF.getRabbitConnectionFactory());
}

@Primary
@Bean(name = { "mule4RabbitCachingConnectionFactory" })
@DependsOn(value = {"amqpSettings"})
CachingConnectionFactory mule4RabbitCachingConnectionFactory() throws KeyManagementException,
        NoSuchAlgorithmException, KeyStoreException, CertificateException, FileNotFoundException, IOException {
    logger.info("Configuring mule4 Rabbit caching connection factory");
    return makeConnectionFactory(settings.getHost(), settings.getPort(), settings.getUsername(),
            settings.getPassword(), queueSettings.getMule4VirtualHost());
}

@Bean
@Qualifier("mule4RabbitCachingConnectionFactory")
SimpleRabbitListenerContainerFactory mule4RabbitListenerContainerFactory(
        SimpleRabbitListenerContainerFactoryConfigurer configurer,
        @Qualifier("mule4RabbitCachingConnectionFactory") ConnectionFactory connectionFactory)
        throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, CertificateException,
        FileNotFoundException, IOException {
    logger.info("Configuring mule4 Rabbit listener factory");
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    factory.setMaxConcurrentConsumers(20);
    factory.setConcurrentConsumers(20);
    factory.setMessageConverter(new QueueMessageConverter());
    factory.setDefaultRequeueRejected(Boolean.FALSE);
    return factory;
}

}

AmqpSettings配置类

@ConfigurationProperties("queue.rabbitmq")
@Component
public class AmqpSettings {
private String host;
private Integer port;
private String username;
private String password;

public String getHost() {
    return host;
}
public void setHost(String host) {
    this.host = host;
}
public Integer getPort() {
    return port;
}
public void setPort(Integer port) {
    this.port = port;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

    
}
解决思路
  • 验证配置加载时机:在mule4RabbitCachingConnectionFactory方法中打印settings的所有属性值,确认创建连接工厂时配置是否已正确加载。若出现空值,改用构造函数注入替代@Autowired,确保依赖完全初始化后再创建Bean。
  • 清理本地缓存:删除STS的本地Maven缓存(.m2/repository)和项目的target目录,重新构建项目,排除旧配置或依赖缓存的影响。
  • 确认虚拟主机权限:通过RabbitMQ管理控制台,再次检查本地连接使用的虚拟主机对应用户是否拥有配置、读写权限,避免权限配置不一致。
  • 命令行测试连接:使用rabbitmqadmin工具直接在本地测试连接,命令格式:rabbitmqadmin -H <host> -P <port> -u <username> -p <password> -V <vhost> list queues,排查代码之外的网络或RabbitMQ实例问题。
  • 延迟连接初始化:设置CachingConnectionFactory的setAutoStartup(false),在应用启动完成后手动触发连接;或添加@Lazy注解延迟连接工厂初始化,确保所有配置加载完成。
  • 调整RabbitMQ日志级别:将RabbitMQ日志级别临时调整为debug,重启实例后再次触发连接,查看认证相关的详细日志,定位拒绝原因。

内容的提问来源于stack exchange,提问作者user4122863

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:35:14