更新时间:2025-06-27 GMT+08:00
分享

配置RabbitMQ单一活跃消费者

单一活跃消费者(Single Active Consumer)表示队列中可以注册多个消费者,但是只允许一个消费者消费消息,只有在此消费者出现异常时,才会自动转移到另一个消费者进行消费。单一活跃消费者适用于需要保证消息消费顺序性,同时提供高可靠能力的场景。

图1所示,Producer生产9条消息,由于队列设置了单一活跃消费者特性,只有Consumer 1在消费消息。

更多关于单一活跃消费者的说明,请参考Single Active Consumer

图1 单一活跃消费者消费流程

约束与限制

RabbitMQ 3.8.35及以上版本支持单一活跃消费者特性。

配置单一活跃消费者

您可以在客户端或RabbitMQ WebUI中声明队列时,配置单一活跃消费者。

在声明队列时,可以配置单一活跃消费者,只需要将队列的“x-single-active-consumer”参数设置为“true”。

以下示例演示在Java客户端设置单一活跃消费者。
Channel ch = ...;
Map<String, Object> arguments = newHashMap<String, Object>();
arguments.put("x-single-active-consumer", true);
ch.queueDeclare("my-queue", false, false, false, arguments);

  1. 登录RabbitMQ实例的Web UI
  2. 在菜单栏,选择“Queues”。
  3. 创建一个单一活跃消费者队列。

    图2 创建单一活跃消费者队列
    表1 队列参数说明

    参数名称

    说明

    Virtual Host

    单一活跃消费者队列所属的Vhost。“/”表示默认Vhost。

    Type

    队列的类型。

    Name

    单一活跃消费者队列的名称,用户自定义。

    Durability

    是否开启持久化。

    • Durable:该Queue在服务器重启后仍然存在。
    • Transient:该Queue在服务器重启后会被删除,需要重新创建。

    Node

    单一活跃消费者队列部署的节点。

    Auto delete

    是否开启自动删除。

    • Yes:当订阅该Queue消息的最后一个消费者取消订阅后,该Queue将被自动删除。
    • No:当订阅该Queue消息的最后一个消费者取消订阅后,不会删除该Queue。

    Arguments

    通过“x-single-active-consumer=true”,配置单一活跃消费者属性。

  4. 单击“Add queue”,完成单一活跃消费者队列的创建。
  5. 在“Queues”页面查看队列特性是否包含单一活跃消费者。如图3所示,“SAC”即表示队列已设置单一活跃消费者。

    图3 查看队列特性

相关文档