策略管理

最近更新时间:2024-08-21 14:13:52

我的收藏

操作场景

在消息队列 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 时,镜像参数可选至少 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
队列中允许的最大消息数。当队列中的消息数达到此限制时,根据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. 在弹出的提示框中,单击删除,完成删除。