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配置中。 - 用命令测试端口连通性:
如果返回“连接被拒绝”,说明端口未开放或RabbitMQ未在该端口监听。# 用nc测试(更直观) nc -zv localhost 5672 # 或telnet方式 telnet localhost 5672
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
相关产品推荐
相关产品推荐

