Skip to content

验证安装

1. 概述

完成 RabbitMQ 安装后,需要进行全面的验证以确保服务正常运行。本章将详细介绍各种验证方法,包括服务状态检查、端口检测、连接测试、管理界面验证以及功能测试。

2. 服务状态验证

2.1 检查服务运行状态

Linux (systemd)

bash
sudo systemctl status rabbitmq-server

sudo systemctl is-active rabbitmq-server
sudo systemctl is-enabled rabbitmq-server

Windows

powershell
Get-Service RabbitMQ
sc query RabbitMQ
net start | findstr RabbitMQ

macOS (Homebrew)

bash
brew services list | grep rabbitmq
brew services info rabbitmq

Docker

bash
docker ps | grep rabbitmq
docker inspect rabbitmq | grep -A 10 "Status"
docker compose ps

Kubernetes

bash
kubectl get pods -n rabbitmq
kubectl get statefulset -n rabbitmq
kubectl describe pod rabbitmq-0 -n rabbitmq

2.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 GB

2.3 节点健康检查

bash
rabbitmqctl node_health_check

输出示例:

Health check passed for node rabbit@localhost

2.4 检查进程

Linux/macOS

bash
ps aux | grep rabbit
ps aux | grep beam

pgrep -a beam.smp

Windows

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 :15672

Windows

powershell
netstat -ano | findstr ":5672"
netstat -ano | findstr ":15672"
Get-NetTCPConnection -LocalPort 5672,15672,25672,4369

3.2 端口说明

端口服务说明
5672AMQP客户端连接端口
5671AMQPSSSL 加密连接端口
15672ManagementWeb 管理界面端口
15671Management HTTPS加密管理界面端口
25672Cluster集群节点通信端口
4369EPMDErlang 端口映射守护进程

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:15672

4. 连接测试

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/whoami

4.2 命令行工具测试

bash
# 列出所有用户
rabbitmqctl list_users

# 列出所有虚拟主机
rabbitmqctl list_vhosts

# 列出所有队列
rabbitmqctl list_queues

# 列出所有交换机
rabbitmqctl list_exchanges

# 列出所有绑定
rabbitmqctl list_bindings

# 列出所有连接
rabbitmqctl list_connections

# 列出所有通道
rabbitmqctl list_channels

4.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 检查管理界面功能

登录后检查以下功能:

  1. Overview 页面:显示节点概览、消息速率等
  2. Connections 页面:显示当前连接
  3. Channels 页面:显示当前通道
  4. Exchanges 页面:显示交换机列表
  5. Queues 页面:显示队列列表
  6. 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 | jq

6. 功能测试

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_queue

7. 集群验证

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.5

7.2 检查节点状态

bash
rabbitmqctl list_nodes

7.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_pids

7.4 测试故障转移

bash
# 停止一个节点
rabbitmqctl -n rabbit@node2 stop_app

# 检查集群状态
rabbitmqctl cluster_status

# 重启节点
rabbitmqctl -n rabbit@node2 start_app

8. 性能测试

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 30

9. 日志检查

9.1 查看日志文件

Linux

bash
sudo tail -f /var/log/rabbitmq/rabbit@*.log
sudo tail -f /var/log/rabbitmq/rabbit@*_upgrade.log

Windows

powershell
Get-Content "$env:APPDATA\RabbitMQ\log\rabbit@*.log" -Tail 50 -Wait

Docker

bash
docker logs rabbitmq -f
docker compose logs -f rabbitmq

Kubernetes

bash
kubectl logs -n rabbitmq rabbitmq-0 -f

9.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 node

10. 验证脚本

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
fi

10.2 运行验证脚本

bash
chmod +x verify_rabbitmq.sh
./verify_rabbitmq.sh

11. 常见问题排查

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.cookie

11.2 无法连接

bash
# 检查端口
netstat -tuln | grep 5672

# 检查防火墙
sudo ufw status
sudo firewall-cmd --list-all

# 检查用户权限
rabbitmqctl list_users
rabbitmqctl list_permissions

11.3 管理界面无法访问

bash
# 检查插件
rabbitmq-plugins list | grep management

# 启用插件
rabbitmq-plugins enable rabbitmq_management

# 检查端口
netstat -tuln | grep 15672

# 检查配置
cat /etc/rabbitmq/rabbitmq.conf | grep management

12. 相关链接