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

Spring Boot应用连接RabbitMQ时遭遇getsockopt连接拒绝错误求助

Spring Boot应用连接RabbitMQ时遭遇getsockopt连接拒绝错误求助

问题场景还原

我正在开发一个集成RabbitMQ的Spring Boot应用,启动后持续遇到连接拒绝错误,以下是我的配置和日志信息:

application.properties 配置

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.listener.simple.auto-startup=true

RabbitConfig 配置类

@Configuration
public class RabbitMqConfig {
    // Email OTP queue
    public static final String OTP_QUEUE = "otp_email_queue";
    public static final String OTP_EXCHANGE = "otp_email_exchange";
    public static final String OTP_ROUTING_KEY = "otp_email_routing";

    // Registration notification queue
    public static final String REGISTRATION_QUEUE = "registration_email_queue";
    public static final String REGISTRATION_EXCHANGE = "registration_email_exchange";
    public static final String REGISTRATION_ROUTING_KEY = "registration_email_routing";

    @Bean
    public Queue otpQueue() {
        return new Queue(OTP_QUEUE, true);
    }

    @Bean
    public DirectExchange otpExchange() {
        return new DirectExchange(OTP_EXCHANGE);
    }

    @Bean
    public Binding otpBinding() {
        return BindingBuilder.bind(otpQueue()).to(otpExchange()).with(OTP_ROUTING_KEY);
    }

    @Bean
    public Queue registrationQueue() {
        return new Queue(REGISTRATION_QUEUE, true);
    }

    @Bean
    public DirectExchange registrationExchange() {
        return new DirectExchange(REGISTRATION_EXCHANGE);
    }

    @Bean
    public Binding registrationBinding() {
        return BindingBuilder.bind(registrationQueue()).to(registrationExchange()).with(REGISTRATION_ROUTING_KEY);
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jsonMessageConverter());
        return rabbitTemplate;
    }
}

核心错误日志

20-08-2025 11:22:11.873 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] INFO org.springframework.amqp.rabbit.connection.CachingConnectionFactory.connectAddresses - Attempting to connect to: [localhost:5672]
20-08-2025 11:22:11.931 [main] INFO org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.checkMismatchedQueues - Broker not available; cannot force queue declarations during start: java.net.ConnectException: Connection refused: getsockopt
20-08-2025 11:22:11.964 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#1-1] ERROR org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.redeclareElementsIfNecessary - Failed to check/redeclare auto-delete queue(s).
org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: getsockopt
    at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:61)
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:632)
    ...

问题分析与解决步骤

从Connection refused: getsockopt这个核心错误可以看出,应用根本无法连通本地RabbitMQ服务,这是基础的网络/服务可用性问题,先解决这个,队列/交换机的配置才能生效。以下是按优先级排序的排查方案:

1. 先确认RabbitMQ服务是否真的在运行

这是最容易忽略的点:

  • Windows:按Win+R输入services.msc打开服务管理器,找到RabbitMQ Service,查看状态是否为“正在运行”,未运行则右键启动。
  • Mac:用Homebrew安装的话,执行brew services list查看状态,未运行则执行brew services start rabbitmq。
  • Linux:执行systemctl status rabbitmq-server查看状态,未运行则执行systemctl start rabbitmq-server。

2. 验证RabbitMQ的5672端口是否正常监听

你的配置用了默认端口,但要确认:

  • 打开RabbitMQ配置文件(通常在/etc/rabbitmq/rabbitmq.conf或安装目录的config文件夹),检查listeners.tcp.default是否为5672,若被修改过,要同步到Spring Boot配置中。
  • 用命令测试端口连通性:
    # 用nc测试(更直观)
    nc -zv localhost 5672
    # 或telnet方式
    telnet localhost 5672
    
    如果返回“连接被拒绝”,说明端口未开放或RabbitMQ未在该端口监听。

3. 确认guest用户的有效性

你用了默认的guest/guest,但要注意:

  • 默认情况下guest用户仅允许从localhost访问,你的配置符合要求,但要确认该用户未被禁用。
  • 尝试登录RabbitMQ管理后台(默认地址http://localhost:15672),若能正常登录说明用户密码有效;若登不上,需重置guest密码或创建新用户并授予权限。

4. 补充Spring Boot连接的稳定性配置

可以在application.properties中添加以下参数,增强连接的容错性:

# 连接超时时间,避免无限等待
spring.rabbitmq.connection-timeout=10000
# 开启连接重试
spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.max-attempts=3
# 指定虚拟主机(默认是/,若RabbitMQ用了自定义虚拟主机需修改)
spring.rabbitmq.virtual-host=/

5. 检查项目依赖是否完整

确保pom.xml(Maven)或build.gradle(Gradle)已引入正确的依赖:
Maven示例:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
</dependencies>

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:05:29