策略管理

最近更新时间: 2026-06-30 15:06:00

操作场景

在消息队列 RabbitMQ 中,除了强制属性,例如 durable、Exclusive 等,在创建 Queue 或者 Exchange 时还可以配置一些可选的属性来获得不同的功能,比如:x-message-ttl、x-expires、x-max-length 等。
但是,通过 RabbitMQ 客户端为 Queue 或者 Exchange 设定的属性参数一旦设置成功就不能再改变,除非将原来的 Queue 或者 Exchange 删除,重新创建新的 Queue 或者 Exchange 。
策略是一种特殊的运行时参数的用法,支持动态地修改一些属性参数,策略针对 Vhost 级别,一条策略可以匹配一个或多个 Queue 或者 Exchange ,便于批量管理。这就解决了 RabbitMQ 客户端创建的交换器和队列不能修改的问题,也大大提高了应用的灵活性。

操作步骤

新建策略

在新建集群时,若开启了镜像队列,在控制台 策略 页签下默认会有一条策略,可以删除,您也可以重新新建改策略。

  1. 登录 RabbitMQ 控制台。
  2. 在左侧导航栏选择集群管理 > Vhost,选择好地域后,单击目标 Vhost 的 ID,进入基本信息页面。
  3. 单击策略 > 新建策略
  4. 填写策略基本信息。控制台支持新建镜像策略或者自定义策略,具体说明如下:
    镜像策略
    基本设置
  • 当前 Vhost:表示正在给哪个 Vhost 创建镜像策略。

  • 策略名称:1-64个字符,只能包含数字、字母、“.”、“-”和“_”。

  • 匹配模式:一个正则表达式,用来匹配相关的 Queue。常用匹配模式的正则表达式可参考下表:

    正则表达式 含义
    .* 将匹配该 Vhost 下的所有 Queue。
    ^test.* 将匹配该 Vhost 下名称以“test”开头的所有 Queue。
    .test. 将匹配该 Vhost 下名称包含“test”的所有 Queue。
    .*test$ 将匹配该 Vhost 下名称以“test”结尾的所有 Queue。
  • 策略类型:选择 镜像策略。

  • 应用范围:用来指定当前 Policy 生效的范围。镜像策略仅支持在 Queue 中生效。

  • 优先级:定义策略的优先级。如果有多个策略作用于同一个 Queue,那么优先级数字最大的那个 Policy 才会有用。

    策略定义

  • 镜像模式:镜像队列的模式,有效值为 all/exactly/nodes。

    • all:表示在集群中所有的节点上进行镜像。
    • exactly: 表示在指定个数的节点上进行镜像,节点的个数由镜像参数指定。
    • nodes: 表示在指定的节点上进行镜像,节点名称通过镜像参数指定。
  • 镜像参数:表示消息将被同步到的节点。

    • 当镜像模式选择 all 时,该项不用填。
    • 当镜像模式选择 exactly 时,镜像参数可选至少 1 个,最多等于当前集群节点数。
    • 当镜像模式选择 nodes 时,镜像参数可按照节点名称,选到具体哪些节点。
  • 消息同步方式:镜像队列中消息的同步方式,可选 automatic 或者 manual。

  • 主节点退出处理:当主节点优雅退出时,是否允许选举未同步的镜像为 master。

  • 主节点故障处理:当主节点故障/失败时,是否允许选举未同步的镜像为 master。为保证可用性,建议保持为“允许选择所有镜像”。

    自定义策略
    基本设置

  • 当前Vhost:表示正在给哪个 Vhost 创建镜像策略

  • 策略名称:1-64个字符,只能包含数字、字母、“.”、“-”和“_”

  • 匹配模式:一个正则表达式,用来匹配相关的 Queue 或者 Exchange。常用匹配模式的正则表达式可参考下表:

    正则表达式含义
    .*将匹配该 Vhost 下的所有 Queue 或者 Exchange。
    ^test.*将匹配该 Vhost 下名称以“test”开头的所有 Queue 或者 Exchange。
    .*test.*将匹配该 Vhost 下名称包含“test”的所有 Queue 或者 Exchange。
    .*test$将匹配该 Vhost 下名称以“test”结尾的所有 Queue 或者 Exchange。
  • 策略类型:选择 镜像策略

  • 应用范围:用来指定当前 Policy 生效的范围

    • Exchanges And Queues:表示作用于与 Pattern 所匹配的所有 Queue 或者 Exchange。
    • Queues:表示作用于与 Pattern 所匹配的所有 Queue。
    • Exchanges:表示作用于与 Pattern 所匹配的所有 Exchange。
  • 优先级:定义策略的优先级。如果有多个策略作用于同一个 Queue 或者 Exchange,那么优先级数字最大的那个 Policy 才会有用。

    策略定义

  • 您可以自己选择所需要的策略定义字段,如下图。

  • 目前云控制台支持的字段如下表。如需更多字段,请到开源控制台创建。

    字段分类字段名称含义数据类型限制
    Queues (All Types)Max Length<strong>队列中允许的最大消息数。</strong>当队列中的消息数达到此限制时,根据Overflow Behaviour 设置,将会删除旧消息或拒绝新消息。Number
    Queues (All Types)Max Length Bytes<strong>队列中允许的最大消息字节总数。</strong>当队列中的消息字节总数达到此限制时,根据Overflow Behaviour 设置,将会删除旧消息或拒绝新消息。Number
    Queues (All Types)Overflow Behaviour<strong>当队列达到最大长度或最大字节限制时的处理方式。</strong>合法值为:
    • drop-head:删除队列头部的旧消息
    • reject-publish:拒绝新发布的消息
    String
    Queues (All Types)Auto Expire<strong>队列的自动过期时间。</strong>单位为毫秒。当队列在此时间内没有被访问(例如:没有发布消息、消费消息或检查队列状态),队列将被删除。Number
    Queues (All Types)Dead letter exchange<strong>死信交换机。</strong>当消息因为超过TTL、达到队列最大长度或被消费者拒绝而被删除时,这些消息将被发送到指定的死信交换机。String
    Queues (All Types)Dead letter routing key<strong>死信路由键。</strong>当消息被发送到死信交换机时,可以使用此路由键进行路由。String
    Queues [Classic]Message TTL<strong>消息的生存时间(Time to Live)。</strong>单位为毫秒。这个值定义了消息在队列中可以存活的最长时间。当消息在队列中的存活时间超过这个值时,消息将被删除。如果消息被消费者消费(并确认)或者被重新发布到其他队列,那么这个计时器将被重置。Number
    Queues [Classic]Lazy mode<strong>惰性模式。</strong>启用此模式后,RabbitMQ会尽可能将队列中的消息存储到磁盘,以减少内存使用。String ("lazy")
    Queues [Quorum]Max in memory length<strong>每个消费者在确认之前允许消费的最大未确认消息数。</strong>Number
    Queues [Quorum]Max in memory bytes<strong>队列中允许的最大内存字节总数。</strong>当队列中的消息占用的内存字节总数达到此限制时,RabbitMQ会尝试将超出限制的消息写入磁盘,以减少内存使用。请注意,这个设置对于启用了Lazy mode的队列可能不适用,因为在惰性模式下,RabbitMQ默认会尽可能将消息存储到磁盘。Number
    Queues [Quorum]Delivery limit<strong>每个消费者在确认之前允许消费的最大未确认消息数。</strong>Number
    ExchangesAlternate exchange<strong>备用交换机。</strong>当消息无法被路由到任何队列(例如,没有匹配的路由键或队列)时,这些消息将被发送到指定的备用交换机。String
  1. 单击完成,完成策略创建,可以在策略列表看见已创建好的策略。

编辑策略

  1. 在策略列表中,单击目标策略操作列的编辑
  2. 在弹窗中,对策略信息进行编辑。
  3. 单击提交,完成修改。

删除策略

  1. 在策略列表中,找到需要删除的策略,单击操作列的删除
  2. 在弹出的提示框中,单击删除,完成删除。