Appearance
验证安装
1. 概述
完成 RabbitMQ 安装后,需要进行全面的验证以确保服务正常运行。本章将详细介绍各种验证方法,包括服务状态检查、端口检测、连接测试、管理界面验证以及功能测试。
2. 服务状态验证
2.1 检查服务运行状态
Linux (systemd):
bash
sudo systemctl status rabbitmq-server
sudo systemctl is-active rabbitmq-server
sudo systemctl is-enabled rabbitmq-serverWindows:
powershell
Get-Service RabbitMQ
sc query RabbitMQ
net start | findstr RabbitMQmacOS (Homebrew):
bash
brew services list | grep rabbitmq
brew services info rabbitmqDocker:
bash
docker ps | grep rabbitmq
docker inspect rabbitmq | grep -A 10 "Status"
docker compose psKubernetes:
bash
kubectl get pods -n rabbitmq
kubectl get statefulset -n rabbitmq
kubectl describe pod rabbitmq-0 -n rabbitmq2.2 使用 rabbitmqctl 检查状态
bash
rabbitmqctl status输出示例:
Status of node rabbit@localhost ...
Runtime
OS PID: 12345
OS: Linux
Uptime (seconds): 3600
RabbitMQ version: 3.13.0
Erlang version: 26.2.5
Memory
total: 512.0 MB
allocated: 256.0 MB
used: 128.0 MB
File Descriptors
Total: 10000
Used: 50
Available: 9950
Processes
Total: 1000
Used: 100
Available: 900
Disk Space
Free: 50.0 GB
Limit: 1.0 GB2.3 节点健康检查
bash
rabbitmqctl node_health_check输出示例:
Health check passed for node rabbit@localhost2.4 检查进程
Linux/macOS:
bash
ps aux | grep rabbit
ps aux | grep beam
pgrep -a beam.smpWindows:
powershell
Get-Process -Name erl*
Get-Process | Where-Object {$_.ProcessName -like "*rabbit*"}3. 端口检测
3.1 检查端口监听
Linux/macOS:
bash
netstat -tuln | grep -E '5672|15672|25672|4369'
ss -tuln | grep -E '5672|15672|25672|4369'
lsof -i :5672
lsof -i :15672Windows:
powershell
netstat -ano | findstr ":5672"
netstat -ano | findstr ":15672"
Get-NetTCPConnection -LocalPort 5672,15672,25672,43693.2 端口说明
| 端口 | 服务 | 说明 |
|---|---|---|
| 5672 | AMQP | 客户端连接端口 |
| 5671 | AMQPS | SSL 加密连接端口 |
| 15672 | Management | Web 管理界面端口 |
| 15671 | Management HTTPS | 加密管理界面端口 |
| 25672 | Cluster | 集群节点通信端口 |
| 4369 | EPMD | Erlang 端口映射守护进程 |
3.3 端口连通性测试
bash
# 使用 telnet
telnet localhost 5672
telnet localhost 15672
# 使用 nc (netcat)
nc -zv localhost 5672
nc -zv localhost 15672
# 使用 curl
curl -I http://localhost:156724. 连接测试
4.1 HTTP API 测试
bash
# 测试 API 连接
curl -u guest:guest http://localhost:15672/api/overview
# 获取节点信息
curl -u guest:guest http://localhost:15672/api/nodes
# 获取队列信息
curl -u guest:guest http://localhost:15672/api/queues
# 获取用户信息
curl -u guest:guest http://localhost:15672/api/users
# 测试认证
curl -u guest:guest http://localhost:15672/api/whoami4.2 命令行工具测试
bash
# 列出所有用户
rabbitmqctl list_users
# 列出所有虚拟主机
rabbitmqctl list_vhosts
# 列出所有队列
rabbitmqctl list_queues
# 列出所有交换机
rabbitmqctl list_exchanges
# 列出所有绑定
rabbitmqctl list_bindings
# 列出所有连接
rabbitmqctl list_connections
# 列出所有通道
rabbitmqctl list_channels4.3 Python 客户端测试
安装 Pika 库:
bash
pip install pika测试脚本:
python
import pika
credentials = pika.PlainCredentials('guest', 'guest')
parameters = pika.ConnectionParameters('localhost', 5672, '/', credentials)
try:
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
print("✓ RabbitMQ 连接成功")
channel.queue_declare(queue='test_queue')
print("✓ 队列创建成功")
channel.basic_publish(
exchange='',
routing_key='test_queue',
body='Hello RabbitMQ!'
)
print("✓ 消息发送成功")
method_frame, header_frame, body = channel.basic_get(queue='test_queue')
if body:
print(f"✓ 消息接收成功: {body.decode()}")
channel.queue_delete(queue='test_queue')
print("✓ 队列删除成功")
connection.close()
print("✓ 连接关闭成功")
except Exception as e:
print(f"✗ 错误: {e}")4.4 Java 客户端测试
Maven 依赖:
xml
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.20.0</version>
</dependency>测试代码:
java
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class RabbitMQTest {
public static void main(String[] args) {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
System.out.println("✓ RabbitMQ 连接成功");
String queueName = "test_queue";
channel.queueDeclare(queueName, false, false, false, null);
System.out.println("✓ 队列创建成功");
String message = "Hello RabbitMQ!";
channel.basicPublish("", queueName, null, message.getBytes());
System.out.println("✓ 消息发送成功");
System.out.println("✓ 测试完成");
} catch (Exception e) {
System.out.println("✗ 错误: " + e.getMessage());
}
}
}4.5 Node.js 客户端测试
安装 amqplib:
bash
npm install amqplib测试脚本:
javascript
const amqp = require('amqplib');
async function test() {
try {
const connection = await amqp.connect('amqp://guest:guest@localhost:5672');
console.log('✓ RabbitMQ 连接成功');
const channel = await connection.createChannel();
console.log('✓ 通道创建成功');
const queue = 'test_queue';
await channel.assertQueue(queue);
console.log('✓ 队列创建成功');
channel.sendToQueue(queue, Buffer.from('Hello RabbitMQ!'));
console.log('✓ 消息发送成功');
await channel.close();
await connection.close();
console.log('✓ 测试完成');
} catch (error) {
console.error('✗ 错误:', error.message);
}
}
test();5. 管理界面验证
5.1 访问管理界面
在浏览器中访问:
http://localhost:15672默认凭据:
- 用户名:guest
- 密码:guest
5.2 检查管理界面功能
登录后检查以下功能:
- Overview 页面:显示节点概览、消息速率等
- Connections 页面:显示当前连接
- Channels 页面:显示当前通道
- Exchanges 页面:显示交换机列表
- Queues 页面:显示队列列表
- Admin 页面:显示用户和权限管理
5.3 使用 curl 验证管理界面
bash
# 检查管理界面响应
curl -I http://localhost:15672
# 获取概览信息
curl -u guest:guest http://localhost:15672/api/overview | jq
# 检查节点状态
curl -u guest:guest http://localhost:15672/api/nodes | jq6. 功能测试
6.1 创建测试队列
bash
rabbitmqctl eval 'rabbit_amqqueue:declare(rabbit_misc:r(<<"/">>, queue, <<"test_queue">>), true, false, [], none, <<"guest">>).'或使用 HTTP API:
bash
curl -u guest:guest -X PUT http://localhost:15672/api/queues/%2F/test_queue \
-H "Content-Type: application/json" \
-d '{"auto_delete":false,"durable":true,"arguments":{}}'6.2 发送测试消息
bash
curl -u guest:guest -X POST http://localhost:15672/api/exchanges/%2F/amq.default/publish \
-H "Content-Type: application/json" \
-d '{"properties":{},"routing_key":"test_queue","payload":"Hello RabbitMQ!","payload_encoding":"string"}'6.3 消费测试消息
bash
curl -u guest:guest -X POST http://localhost:15672/api/queues/%2F/test_queue/get \
-H "Content-Type: application/json" \
-d '{"count":1,"ackmode":"ack_requeue_false","encoding":"auto"}'6.4 删除测试队列
bash
curl -u guest:guest -X DELETE http://localhost:15672/api/queues/%2F/test_queue7. 集群验证
7.1 检查集群状态
bash
rabbitmqctl cluster_status输出示例:
Cluster status of node rabbit@node1 ...
Basics
Cluster name: rabbit@node1
Disk Nodes
rabbit@node1
rabbit@node2
rabbit@node3
Running Nodes
rabbit@node1
rabbit@node2
rabbit@node3
Versions
rabbit@node1: RabbitMQ 3.13.0, Erlang 26.2.5
rabbit@node2: RabbitMQ 3.13.0, Erlang 26.2.5
rabbit@node3: RabbitMQ 3.13.0, Erlang 26.2.57.2 检查节点状态
bash
rabbitmqctl list_nodes7.3 测试队列镜像
bash
# 设置镜像策略
rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues
# 创建测试队列
rabbitmqctl eval 'rabbit_amqqueue:declare(rabbit_misc:r(<<"/">>, queue, <<"ha_test_queue">>), true, false, [], none, <<"guest">>).'
# 检查队列状态
rabbitmqctl list_queues name policy pid slave_pids7.4 测试故障转移
bash
# 停止一个节点
rabbitmqctl -n rabbit@node2 stop_app
# 检查集群状态
rabbitmqctl cluster_status
# 重启节点
rabbitmqctl -n rabbit@node2 start_app8. 性能测试
8.1 使用 PerfTest 工具
下载 PerfTest:
bash
wget https://github.com/rabbitmq/rabbitmq-perf-test/releases/download/v2.21.0/rabbitmq-perf-test-2.21.0-bin.tar.gz
tar -xzf rabbitmq-perf-test-2.21.0-bin.tar.gz
cd rabbitmq-perf-test-2.21.0运行性能测试:
bash
bin/runjava com.rabbitmq.perf.PerfTest \
-h amqp://guest:guest@localhost:5672/%2F \
-q 10 \
-s 1000 \
-r 10000 \
-x 1 \
-y 1参数说明:
-q:队列数量-s:消息大小(字节)-r:发送速率(消息/秒)-x:生产者数量-y:消费者数量
8.2 基准测试脚本
bash
#!/bin/bash
echo "RabbitMQ Performance Test"
echo "=========================="
echo "Testing publish rate..."
bin/runjava com.rabbitmq.perf.PerfTest \
-h amqp://guest:guest@localhost:5672/%2F \
-s 1000 \
-r 50000 \
-x 4 \
-y 0 \
-t 30
echo "Testing consume rate..."
bin/runjava com.rabbitmq.perf.PerfTest \
-h amqp://guest:guest@localhost:5672/%2F \
-s 1000 \
-x 0 \
-y 4 \
-t 30
echo "Testing combined rate..."
bin/runjava com.rabbitmq.perf.PerfTest \
-h amqp://guest:guest@localhost:5672/%2F \
-s 1000 \
-x 2 \
-y 2 \
-t 309. 日志检查
9.1 查看日志文件
Linux:
bash
sudo tail -f /var/log/rabbitmq/rabbit@*.log
sudo tail -f /var/log/rabbitmq/rabbit@*_upgrade.logWindows:
powershell
Get-Content "$env:APPDATA\RabbitMQ\log\rabbit@*.log" -Tail 50 -WaitDocker:
bash
docker logs rabbitmq -f
docker compose logs -f rabbitmqKubernetes:
bash
kubectl logs -n rabbitmq rabbitmq-0 -f9.2 检查日志级别
bash
rabbitmqctl eval 'application:get_env(rabbit, log).'9.3 常见日志错误
连接错误:
Error: {badrpc,nodedown}内存告警:
memory resource limit alarm set on node磁盘告警:
disk resource limit alarm set on node10. 验证脚本
10.1 完整验证脚本
bash
#!/bin/bash
echo "========================================"
echo "RabbitMQ Installation Verification"
echo "========================================"
echo ""
PASS=0
FAIL=0
check_pass() {
echo "✓ $1"
((PASS++))
}
check_fail() {
echo "✗ $1"
((FAIL++))
}
echo "1. Checking service status..."
if systemctl is-active --quiet rabbitmq-server 2>/dev/null || \
brew services list 2>/dev/null | grep -q "rabbitmq.*started" || \
docker ps 2>/dev/null | grep -q rabbitmq; then
check_pass "RabbitMQ service is running"
else
check_fail "RabbitMQ service is not running"
fi
echo ""
echo "2. Checking process..."
if pgrep -f "beam.smp.*rabbit" > /dev/null 2>&1; then
check_pass "RabbitMQ process is running"
else
check_fail "RabbitMQ process is not found"
fi
echo ""
echo "3. Checking ports..."
for port in 5672 15672; do
if netstat -tuln 2>/dev/null | grep -q ":$port " || \
ss -tuln 2>/dev/null | grep -q ":$port "; then
check_pass "Port $port is listening"
else
check_fail "Port $port is not listening"
fi
done
echo ""
echo "4. Checking rabbitmqctl..."
if rabbitmqctl status > /dev/null 2>&1; then
check_pass "rabbitmqctl status OK"
else
check_fail "rabbitmqctl status FAILED"
fi
echo ""
echo "5. Checking HTTP API..."
if curl -s -u guest:guest http://localhost:15672/api/overview > /dev/null 2>&1; then
check_pass "HTTP API is accessible"
else
check_fail "HTTP API is not accessible"
fi
echo ""
echo "6. Checking management UI..."
if curl -s -I http://localhost:15672 2>/dev/null | grep -q "200 OK"; then
check_pass "Management UI is accessible"
else
check_fail "Management UI is not accessible"
fi
echo ""
echo "7. Testing message operations..."
QUEUE_NAME="verify_test_$$"
if curl -s -u guest:guest -X PUT \
"http://localhost:15672/api/queues/%2F/$QUEUE_NAME" \
-H "Content-Type: application/json" \
-d '{"auto_delete":false,"durable":true}' > /dev/null 2>&1; then
check_pass "Queue creation OK"
else
check_fail "Queue creation FAILED"
fi
if curl -s -u guest:guest -X POST \
"http://localhost:15672/api/exchanges/%2F/amq.default/publish" \
-H "Content-Type: application/json" \
-d '{"routing_key":"'"$QUEUE_NAME"'","payload":"test","payload_encoding":"string"}' > /dev/null 2>&1; then
check_pass "Message publish OK"
else
check_fail "Message publish FAILED"
fi
if curl -s -u guest:guest -X POST \
"http://localhost:15672/api/queues/%2F/$QUEUE_NAME/get" \
-H "Content-Type: application/json" \
-d '{"count":1,"ackmode":"ack_requeue_false"}' | grep -q "test"; then
check_pass "Message consume OK"
else
check_fail "Message consume FAILED"
fi
curl -s -u guest:guest -X DELETE "http://localhost:15672/api/queues/%2F/$QUEUE_NAME" > /dev/null 2>&1
echo ""
echo "========================================"
echo "Verification Results"
echo "========================================"
echo "Passed: $PASS"
echo "Failed: $FAIL"
echo ""
if [ $FAIL -eq 0 ]; then
echo "✓ All checks passed! RabbitMQ is working correctly."
exit 0
else
echo "✗ Some checks failed. Please review the output above."
exit 1
fi10.2 运行验证脚本
bash
chmod +x verify_rabbitmq.sh
./verify_rabbitmq.sh11. 常见问题排查
11.1 服务无法启动
bash
# 检查日志
journalctl -u rabbitmq-server -n 50
tail -f /var/log/rabbitmq/*.log
# 检查权限
ls -la /var/lib/rabbitmq
ls -la /var/log/rabbitmq
# 检查 Erlang Cookie
cat /var/lib/rabbitmq/.erlang.cookie11.2 无法连接
bash
# 检查端口
netstat -tuln | grep 5672
# 检查防火墙
sudo ufw status
sudo firewall-cmd --list-all
# 检查用户权限
rabbitmqctl list_users
rabbitmqctl list_permissions11.3 管理界面无法访问
bash
# 检查插件
rabbitmq-plugins list | grep management
# 启用插件
rabbitmq-plugins enable rabbitmq_management
# 检查端口
netstat -tuln | grep 15672
# 检查配置
cat /etc/rabbitmq/rabbitmq.conf | grep management