操作场景
在消息队列 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”结尾的。 |
策略类型:选择 镜像策略。
应用范围:用来指定当前 Policy 生效的范围。镜像策略仅支持在 Queue 中生效。
优先级:定义策略的优先级。如果有多个策略作用于同一个 Queue,那么优先级数字最大的那个 Policy 才会有用。
策略定义
镜像模式:镜像队列的模式,有效值为 all/exactly/nodes。
all:表示在集群中所有的节点上进行镜像。
exactly: 表示在指定个数的节点上进行镜像,节点的个数由镜像参数指定。
nodes: 表示在指定的节点上进行镜像,节点名称通过镜像参数指定。
镜像参数:表示消息将被同步到的节点。
当镜像模式选择 all 时,该项不用填。
当镜像模式选择 exactly 时,镜像参数推荐选择 3,最多可以等于当前集群节点数,至少可以选择 1。
当镜像模式选择 nodes 时,镜像参数可按照节点名称,选到具体哪些节点,推荐选择 3 个节点。
消息同步方式:镜像队列中消息的同步方式,可选 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 | 队列中允许的最大消息数。当队列中的消息数达到此限制时,根据Overflow Behaviour 设置,将会删除旧消息或拒绝新消息。 | Number |
Queues (All Types) | Max Length Bytes | 队列中允许的最大消息字节总数。当队列中的消息字节总数达到此限制时,根据Overflow Behaviour 设置,将会删除旧消息或拒绝新消息。 | Number |
Queues (All Types) | Overflow Behaviour | 当队列达到最大长度或最大字节限制时的处理方式。合法值为: drop-head:删除队列头部的旧消息 reject-publish:拒绝新发布的消息 | String |
Queues (All Types) | Auto Expire | 队列的自动过期时间。单位为毫秒。当队列在此时间内没有被访问(例如:没有发布消息、消费消息或检查队列状态),队列将被删除。 | Number |
Queues (All Types) | Dead letter exchange | 死信交换机。当消息因为超过TTL、达到队列最大长度或被消费者拒绝而被删除时,这些消息将被发送到指定的死信交换机。 | String |
Queues (All Types) | Dead letter routing key | 死信路由键。当消息被发送到死信交换机时,可以使用此路由键进行路由。 | String |
Queues [Classic] | Message TTL | 消息的生存时间(Time to Live)。单位为毫秒。这个值定义了消息在队列中可以存活的最长时间。当消息在队列中的存活时间超过这个值时,消息将被删除。如果消息被消费者消费(并确认)或者被重新发布到其他队列,那么这个计时器将被重置。 | Number |
Queues [Classic] | Lazy mode | 惰性模式。启用此模式后,RabbitMQ会尽可能将队列中的消息存储到磁盘,以减少内存使用。 | String ("lazy") |
Queues [Quorum] | Max in memory length | 每个消费者在确认之前允许消费的最大未确认消息数。 | Number |
Queues [Quorum] | Max in memory bytes | 队列中允许的最大内存字节总数。当队列中的消息占用的内存字节总数达到此限制时,RabbitMQ会尝试将超出限制的消息写入磁盘,以减少内存使用。请注意,这个设置对于启用了Lazy mode的队列可能不适用,因为在惰性模式下,RabbitMQ默认会尽可能将消息存储到磁盘。 | Number |
Queues [Quorum] | Delivery limit | 每个消费者在确认之前允许消费的最大未确认消息数。 | Number |
Exchanges | Alternate exchange | 备用交换机。当消息无法被路由到任何队列(例如,没有匹配的路由键或队列)时,这些消息将被发送到指定的备用交换机。 | String |
5. 单击完成,完成策略创建,可以在策略列表看见已创建好的策略。
编辑策略
1. 在策略列表中,单击目标策略操作列的编辑。
2. 在弹窗中,对策略信息进行编辑。
3. 单击完成,完成修改。
删除策略
1. 在策略列表中,找到需要删除的策略,单击操作列的删除。
2. 在弹出的提示框中,单击删除,完成删除。