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

如何解决RabbitMQ连接时出现的Socket连接拒绝错误

解决RabbitMQ连接拒绝(Connection refused)问题

核心问题定位

日志显示处理器端尝试连接localhost:5672,但配置文件指定的是K8s集群内的Service域名,说明处理器端的配置未被正确加载,或是存在硬编码覆盖配置的情况。

排查与修复步骤

1. 检查代码中的硬编码覆盖

查看ReportProcessor类及其依赖的RabbitMQ配置类,确认是否存在硬编码指定localhost的代码:

// 错误示例:硬编码会覆盖配置文件设置
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");

如果有这类代码,替换为读取配置文件的变量:

@Value("${spring.rabbitmq.host}")
private String rabbitmqHost;

// 初始化ConnectionFactory时使用配置变量
factory.setHost(rabbitmqHost);

2. 验证配置文件的有效性

  • 确认application.properties放置在正确路径(如src/main/resources),打包后是否被包含在Jar包内,可通过以下命令检查:
jar tf your-processor-app.jar | grep application.properties
  • 若使用多环境配置,检查是否通过spring.profiles.active激活了正确的环境配置。

3. 修正K8s Service域名配置

你的RabbitMQ Service名称为team1-rabbitmq,集群内正确域名格式为[service-name].[namespace].svc.cluster.local,当前配置的rabbitmq.rabbitmq.svc.cluster.local存在Service名称错误,修改application.properties:

spring.rabbitmq.host=team1-rabbitmq.rabbitmq.svc.cluster.local
spring.rabbitmq.port=5672
spring.rabbitmq.username=team1
spring.rabbitmq.password=team1

4. 在Pod内测试网络连通性

进入处理器端Pod,验证与RabbitMQ Service的网络连通性:

# 进入处理器Pod
kubectl exec -it <processor-pod-name> -- /bin/bash

# ping Service域名
ping team1-rabbitmq.rabbitmq.svc.cluster.local

# 测试5672端口连通性
telnet team1-rabbitmq.rabbitmq.svc.cluster.local 5672

若无法连通,检查Pod与RabbitMQ Service是否在同一Namespace,或是存在NetworkPolicy限制了Pod间访问。

5. 排查环境变量覆盖

检查K8s部署文件中是否设置了覆盖RabbitMQ配置的环境变量:

env:
  - name: SPRING_RABBITMQ_HOST
    value: localhost

若存在此类配置,删除或修改为正确的Service域名。

验证修复结果

重新部署处理器端应用,查看日志确认连接地址已更新为正确的Service域名,若连接成功则问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:38:09