telnet localhost 15672 RabbitMQ “Connection refused“ 错误表示目标主机拒绝了连接请求。

1. 首先检查 RabbitMQ 服务状态

bash

复制代码
# 检查服务是否运行
sudo systemctl status rabbitmq-server

# 如果服务没运行,启动它
sudo systemctl start rabbitmq-server

# 设置开机自启
sudo systemctl enable rabbitmq-server

# 如果服务启动失败,查看日志
sudo journalctl -u rabbitmq-server -f
sudo tail -f /var/log/rabbitmq/rabbit@$(hostname).log

2. 检查 RabbitMQ 是否在监听端口

bash

复制代码
# RabbitMQ 默认使用以下端口:
# 5672 - AMQP 协议(客户端连接)
# 15672 - Web 管理界面
# 25672 - Erlang 分布式节点间通信
# 4369 - Erlang 端口映射守护进程(epmd)

# 查看所有监听端口
sudo ss -tulpn | grep rabbitmq
# 或
sudo netstat -tulpn | grep rabbitmq

# 检查特定端口
sudo ss -tlnp | grep :5672
sudo ss -tlnp | grep :15672

# 如果没有显示,RabbitMQ 可能没有正确配置

3. 检查防火墙设置

bash

复制代码
# 查看防火墙状态
sudo ufw status

# 如果防火墙启用,开放 RabbitMQ 端口
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp

# 重新加载防火墙
sudo ufw reload

# 或者临时禁用防火墙测试
sudo ufw disable
# 测试连接后记得重新启用
sudo ufw enable

4. 检查 SELinux(如果有的话)

bash

复制代码
# 查看 SELinux 状态
getenforce

# 如果是 Enforcing 模式,暂时禁用测试
sudo setenforce 0

# 或者添加 RabbitMQ 端口到 SELinux
sudo semanage port -a -t amqp_port_t -p tcp 5672
sudo semanage port -a -t http_port_t -p tcp 15672

# 永久禁用 SELinux(不推荐)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

5. 检查 RabbitMQ 配置

bash

复制代码
# 查看 RabbitMQ 配置文件
sudo cat /etc/rabbitmq/rabbitmq.conf

# 如果文件不存在,创建默认配置
echo "# RabbitMQ 配置
# 监听所有IP地址
listeners.tcp.default = 0.0.0.0:5672

# Web管理界面
management.tcp.port = 15672
management.tcp.ip   = 0.0.0.0

# 日志级别
log.file.level = info" | sudo tee /etc/rabbitmq/rabbitmq.conf

# 重启 RabbitMQ
sudo systemctl restart rabbitmq-server

6. 启用管理插件并检查

bash

复制代码
# 启用管理插件
sudo rabbitmq-plugins enable rabbitmq_management

# 创建管理员用户
sudo rabbitmqctl add_user admin your_password
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

# 重启服务
sudo systemctl restart rabbitmq-server

# 检查插件状态
sudo rabbitmq-plugins list

7. 完整的诊断脚本

创建一个 diagnose_rabbitmq.sh 脚本:

bash

复制代码
#!/bin/bash

echo "=== RabbitMQ 连接问题诊断 ==="
echo

echo "1. 检查系统信息:"
echo "Hostname: $(hostname)"
echo "IP Addresses:"
ip addr show | grep inet | grep -v inet6
echo

echo "2. 检查服务状态:"
sudo systemctl status rabbitmq-server --no-pager
echo

echo "3. 检查监听端口:"
echo "端口 5672 (AMQP):"
sudo ss -tlnp | grep :5672 || echo "端口 5672 未监听"
echo
echo "端口 15672 (Web管理):"
sudo ss -tlnp | grep :15672 || echo "端口 15672 未监听"
echo

echo "4. 检查进程:"
ps aux | grep rabbitmq | grep -v grep
echo

echo "5. 检查防火墙:"
sudo ufw status
echo

echo "6. 检查配置文件:"
if [ -f /etc/rabbitmq/rabbitmq.conf ]; then
    sudo grep -E "listener|port|ip" /etc/rabbitmq/rabbitmq.conf
else
    echo "配置文件不存在: /etc/rabbitmq/rabbitmq.conf"
fi
echo

echo "7. 尝试本地连接测试:"
echo "测试 127.0.0.1:5672:"
timeout 2 bash -c "echo > /dev/tcp/127.0.0.1/5672" 2>/dev/null && echo "✓ 端口可访问" || echo "✗ 端口不可访问"
echo

echo "8. 测试 telnet 连接:"
echo "连接到 127.0.0.1:5672:"
timeout 3 telnet 127.0.0.1 5672 2>&1 | head -5
echo

echo "9. 查看日志错误:"
sudo tail -20 /var/log/rabbitmq/rabbit@$(hostname).log 2>/dev/null | grep -i error || echo "无错误日志"
echo

echo "=== 诊断完成 ==="

运行脚本:

bash

复制代码
chmod +x diagnose_rabbitmq.sh
sudo ./diagnose_rabbitmq.sh

8. 快速修复步骤

如果以上步骤太复杂,试试这个快速修复:

bash

复制代码
# 停止服务
sudo systemctl stop rabbitmq-server

# 清理旧的数据(注意:这会删除所有队列和消息)
sudo rm -rf /var/lib/rabbitmq/mnesia/

# 创建默认配置
sudo tee /etc/rabbitmq/rabbitmq.conf > /dev/null << 'EOF'
# 监听所有网络接口
listeners.tcp.default = 0.0.0.0:5672

# 允许远程连接
loopback_users = none

# Web 管理界面
management.tcp.port = 15672
management.tcp.ip = 0.0.0.0
EOF

# 启动服务
sudo systemctl start rabbitmq-server

# 启用管理插件
sudo rabbitmq-plugins enable rabbitmq_management

# 等待服务启动
sleep 5

# 检查状态
sudo systemctl status rabbitmq-server
sudo ss -tulpn | grep rabbitmq

9. 测试连接

bash

复制代码
# 测试 AMQP 端口 (5672)
echo "测试 AMQP 连接:"
timeout 3 telnet localhost 5672
# 或者使用 nc
echo "quit" | nc localhost 5672

# 测试 Web 管理界面 (15672)
echo "测试 Web 管理界面:"
curl -I http://localhost:15672 2>/dev/null || wget -q --spider http://localhost:15672

# 使用 Python 测试(如果没有安装:sudo apt install python3)
python3 -c "
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
try:
    s.connect(('localhost', 5672))
    print('连接成功')
    s.close()
except Exception as e:
    print(f'连接失败: {e}')
"

10. 常见问题和解决方案

问题1:端口被占用

bash

复制代码
# 检查哪个进程占用了端口
sudo lsof -i :5672

# 如果是其他进程,停止它
sudo kill -9 <PID>

问题2:内存不足

bash

复制代码
# 查看 RabbitMQ 内存使用
sudo rabbitmqctl status | grep memory

# 如果内存不足,可以修改配置
echo "vm_memory_high_watermark.relative = 0.6" | sudo tee -a /etc/rabbitmq/rabbitmq.conf

bash

复制代码
# 检查 Erlang cookie
sudo cat /var/lib/rabbitmq/.erlang.cookie

# 确保所有节点有相同的 cookie

11. 如果还是不行,尝试完全重装

bash

复制代码
# 完全卸载 RabbitMQ
sudo apt purge --auto-remove rabbitmq-server
sudo rm -rf /etc/rabbitmq/
sudo rm -rf /var/lib/rabbitmq/

# 重新安装
sudo apt update
sudo apt install rabbitmq-server

# 配置并启动
sudo systemctl start rabbitmq-server
sudo rabbitmq-plugins enable rabbitmq_management

# 创建用户
sudo rabbitmqctl add_user myuser mypassword
sudo rabbitmqctl set_user_tags myuser administrator
sudo rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"

最终测试

bash

复制代码
# 最终验证
echo "=== 最终验证 ==="
echo "1. 服务状态:" && sudo systemctl is-active rabbitmq-server
echo "2. 端口监听:" && sudo ss -tlnp | grep -E ':5672|:15672'
echo "3. 本地连接测试:" && timeout 2 bash -c "echo > /dev/tcp/localhost/5672" 2>/dev/null && echo "成功" || echo "失败"
echo "4. 远程连接测试:" && telnet localhost 5672

如果按照以上步骤操作,99% 的 "Connection refused" 问题都能解决。最常见的原因是:

  1. RabbitMQ 服务没启动

  2. 防火墙阻止了连接

  3. RabbitMQ 配置为只监听本地回环地址

相关推荐
陌上丨2 小时前
生产环境分布式锁的常见问题和解决方案有哪些?
分布式
新新学长搞科研2 小时前
【智慧城市专题IEEE会议】第六届物联网与智慧城市国际学术会议(IoTSC 2026)
人工智能·分布式·科技·物联网·云计算·智慧城市·学术会议
Ronin3052 小时前
日志打印和实用 Helper 工具
数据库·sqlite·rabbitmq·文件操作·uuid生成
泡泡以安3 小时前
Scrapy分布式爬虫调度器架构设计说明
分布式·爬虫·scrapy·调度器
没有bug.的程序员4 小时前
RocketMQ 与 Kafka 深度对垒:分布式消息引擎内核、事务金融级实战与高可用演进指南
java·分布式·kafka·rocketmq·分布式消息·引擎内核·事务金融
上海锟联科技4 小时前
250MSPS DAS 在地铁监测中够用吗?——来自上海锟联科技的工程实践
分布式·科技·分布式光纤传感·das解调卡·光频域反射·das
岁岁种桃花儿5 小时前
深度解析DolphinScheduler核心架构:搭建高可用Zookeeper集群
linux·分布式·zookeeper
yxy___5 小时前
达梦分布式集群DPC_影子和实体副本相互转换(DEM)_yxy
分布式·dem·影子副本
努力有什么不好5 小时前
Hadoop3.2.2伪分布式搭建
大数据·hadoop·分布式