一、下载

安装包可从 RabbitMQ 官网 下载 

Installing RabbitMQ | RabbitMQ

大家可以根据自己系统环境选择指定安装

二、安装并启用 RabbitMQ 管理插件

管理工具是 RabbitMQ 的内置插件,无需额外下载,只需通过命令启用。

步骤 1:启动 RabbitMQ 服务
  1. 按下 Win + R,输入 services.msc 打开服务管理器。
  2. 找到 RabbitMQ 服务,确保其状态为 正在运行(若未运行,右键点击「启动」)。
步骤 2:启用管理插件
  1. 以 管理员身份 打开 PowerShell 或 命令提示符(CMD)

    • 右键点击「开始」→ 选择「Windows PowerShell (管理员)」。
  2. 执行以下命令启用管理插件:

    powershell

    rabbitmq-plugins.bat enable rabbitmq_management
    

    成功启用后会显示类似信息:

    plaintext

    Enabling plugins on node rabbit@DESKTOP-XXX:
    rabbitmq_management
    The following plugins have been configured:
      rabbitmq_management
      rabbitmq_management_agent
      rabbitmq_web_dispatch
    Applying plugin configuration to rabbit@DESKTOP-XXX...
    The following plugins have been enabled:
      rabbitmq_management
      rabbitmq_management_agent
      rabbitmq_web_dispatch
    
  3. (可选)若服务未自动重启,手动重启 RabbitMQ 服务:

    powershell

    net stop RabbitMQ && net start RabbitMQ
    

三、访问管理界面

管理工具默认通过 15672 端口 提供 Web 服务。

  1. 打开浏览器,访问本地地址:

    plaintext

    http://localhost:15672
    
  2. 登录验证

    • 默认账号:guest
    • 默认密码:guest⚠️ 注意:默认账号 仅允许本地访问localhost 或 127.0.0.1),若需从其他机器访问,必须创建新用户。

四、配置远程访问用户(可选)

若需要从同一局域网的其他电脑访问管理界面,需创建具有管理员权限的用户。

通过命令行创建用户

在管理员 PowerShell 中执行以下命令:

  1. 创建用户(例如:用户 admin,密码 Admin@123):

    powershell

    rabbitmqctl.bat add_user admin Admin@123
    
  2. 设置用户角色为管理员administrator 拥有最高权限):

    powershell

    rabbitmqctl.bat set_user_tags admin administrator
    
  3. 授予用户访问所有虚拟主机的权限

    powershell

    rabbitmqctl.bat set_permissions -p / admin ".*" ".*" ".*"
    
    • 权限说明:".*" 表示允许配置(configure)、写入(write)、读取(read)所有资源。
  4. 验证用户创建结果

    powershell

    rabbitmqctl.bat list_users
    

    输出应包含 admin 用户及 administrator 标签。

通过管理界面创建用户
  1. 用默认账号 guest 登录 http://localhost:15672
  2. 点击顶部 Admin 标签,在 Add a user 区域填写:
    • Username:自定义用户名(如 admin
    • Password:自定义密码(如 Admin@123
    • Tags:选择 administrator(下拉框中勾选)
  3. 点击 Add user 完成创建。
  4. 点击新创建的用户名,在 Permissions 区域:
    • Virtual Host 选择 /(默认虚拟主机)
    • Configure regexp、Write regexp、Read regexp 均填写 .*
    • 点击 Set permission 授予权限。

五、管理界面核心功能使用

登录后,界面包含以下核心标签页,操作与 Linux 环境一致:

1. Overview(概览)
  • 显示服务器状态:节点信息、内存 / 磁盘使用量、消息总数、连接数等。
  • 可查看消息生产 / 消费速率图表。
2. Connections(连接)
  • 查看所有客户端连接(IP、端口、状态等),可手动关闭异常连接(点击 Close)。
3. Channels(信道)
  • 显示基于连接的信道信息,包括未确认消息数、消息确认模式等。
4. Exchanges(交换机)
  • 创建交换机:点击 Add a new exchange,输入名称、选择类型(如 directtopic)、设置是否持久化(Durable)。
  • 绑定队列:在交换机详情页,通过 Bindings 区域绑定队列(需指定路由键 Routing key)。
5. Queues(队列)
  • 创建队列:点击 Add a new queue,输入名称、设置是否持久化(Durable)等参数。
  • 发送 / 接收消息
    • 发送:在队列详情页的 Publish message 区域填写消息内容,点击 Publish message
    • 接收:在 Get messages 区域点击 Get Message(s),可查看队列中的消息(可选是否删除消息)。
6. Admin(用户管理)
  • 管理用户、虚拟主机、权限,支持修改用户密码、删除用户等操作。
7. Policies(策略)
  • 配置队列 / 交换机的策略(如消息过期时间、死信队列),例如设置队列消息 30 秒过期:
    • Name:expire-30s
    • Pattern:^my-queue$(匹配队列名)
    • Definition:{"message-ttl": 30000}

六、常见问题解决

  1. 无法访问 15672 端口

    • 检查 RabbitMQ 服务是否启动(services.msc 中确认)。
    • 检查防火墙是否允许 15672 端口(可暂时关闭防火墙测试)。
  2. 远程访问被拒绝

    • 确保已创建非 guest 用户并授予权限。
    • 远程访问地址需用服务器 IP(如 http://192.168.1.100:15672),而非 localhost
  3. 插件启用失败

    • 检查 Erlang 和 RabbitMQ 版本是否兼容。
    • 以管理员身份运行命令行工具。

七、注意事项

  1. 生产环境中,建议修改默认端口 15672 并限制访问 IP(通过防火墙配置)。
  2. 避免使用弱密码,定期更新用户密码。
  3. 管理界面的「Get messages」操作会消费队列消息,生产环境慎用,建议通过客户端监控工具(如 Prometheus + Grafana)替代。

通过以上步骤,即可在 Windows 系统中完成 RabbitMQ 管理工具的安装、配置,并通过 Web 界面直观管理消息队列资源。

八、C# RabbitMQ 使用

💻 C# 客户端 (RabbitMQ.Client) 的使用

在C#项目中使用RabbitMQ,主要通过 RabbitMQ.Client NuGet包。

建立连接

使用 ConnectionFactory 来配置连接参数 :

csharp

using RabbitMQ.Client;

var factory = new ConnectionFactory()
{
    HostName = "localhost", // RabbitMQ服务器地址 :cite[2]
    Port = 5672,            // 默认AMQP端口 :cite[4]
    UserName = "guest",     // 用户名 :cite[2]
    Password = "guest",     // 密码 :cite[2]
    VirtualHost = "/",      // 虚拟主机 :cite[4]
    // 其他可选配置,如心跳、自动恢复等 :cite[4]
};

using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
    // 后续使用 channel 进行队列声明、发送/接收消息等操作 :cite[2]
}
发送消息 (Producer)

下面的代码演示了如何发送一条持久化的消息到指定队列:

csharp

// 声明一个队列 (如果不存在则创建)
channel.QueueDeclare(queue: "hello",
                     durable: true,   // 队列持久化
                     exclusive: false,
                     autoDelete: false,
                     arguments: null);

string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);

// 设置消息属性为持久化
var properties = channel.CreateBasicProperties();
properties.Persistent = true;

// 发布消息
channel.BasicPublish(exchange: "",
                     routingKey: "hello",
                     basicProperties: properties,
                     body: body);
Console.WriteLine(" [x] Sent {0}", message);

注意:将消息标记为持久化(Persistent = true)并不能保证消息绝对不丢失。它只是告诉RabbitMQ尽可能将消息保存到磁盘,但依然存在一个短的时间窗口。

接收消息 (Consumer)

使用 EventingBasicConsumer 可以方便地以事件驱动的方式处理消息:

csharp

var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
    var body = ea.Body.ToArray();
    var message = Encoding.UTF8.GetString(body);
    Console.WriteLine(" [x] Received {0}", message);

    // 模拟耗时任务
    Thread.Sleep(1000);

    Console.WriteLine(" [x] Done");

    // 手动发送消息确认 (ack)
    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
};

// 启动消费者,并设置手动消息确认 (autoAck: false)
channel.BasicConsume(queue: "hello",
                     autoAck: false,  // 关闭自动确认
                     consumer: consumer);

关键点:消息确认 (Ack) 

  • 自动确认 (autoAck: true):消息一旦被传递给消费者,RabbitMQ立即将其从队列中删除。如果消费者处理消息过程中失败,消息将丢失。

  • 手动确认 (autoAck: false):消费者在处理完消息后,必须显式地发送一个确认 (BasicAck)。如果消费者在处理消息时挂掉,RabbitMQ会将此消息重新投递给另一个消费者。手动确认模式更能保证消息不被丢失

💎 总结

  • 管理工具Web管理界面适合日常监控和管理,而 rabbitmqadmin 更适合集成到脚本中进行自动化操作。

  • C#客户端:核心是使用 RabbitMQ.Client 库。务必注意根据你的可靠性要求,在发送消息时配置持久化,在消费消息时合理选择消息确认模式,手动确认通常更可靠。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐