1. 第一条命令:删除指定队列
curl -X DELETE -u admin:rmq@1234
"http://10.11.64.12:15672/api/queues/%2F/ai-tpp-pm-749a510b-aa20-47a1-bac5-7f44f7edb1ab"
作用
删除虚拟主机 /
(编码为 %2F
)下名为 ai-tpp-pm-749a510b-aa20-47a1-bac5-7f44f7edb1ab
的队列。
参数解析
参数 | 说明 |
---|---|
-X DELETE |
使用 HTTP DELETE 方法 |
-u admin:rmq@1234 |
基本认证(用户名:密码) |
%2F |
URL 编码的默认虚拟主机 / |
队列名 | 完整队列名称,需精确匹配 |
适用场景
- 明确知道队列名称,需立即删除单个队列。
2. 第二条命令:创建自动删除策略
curl -X PUT -u admin:rmq@1234^
-H "Content-Type: application/json" ^
-d "{\"pattern\":\"^ai-tpp-pm.*\", \"definition\":{\"expires\":10000}, \"apply-to\":\"queues\"}" ^
"http://10.11.64.12:15672/api/policies/%2F/auto-delete-queues"
作用
创建一个名为 auto-delete-queues
的策略,规则如下:
- 匹配队列:名称以
ai-tp-pm
开头的所有队列(正则表达式^ai-tpp-pm.*
)。 - 行为:队列空闲 10 秒(
expires:10000
毫秒)后自动删除。 - 生效范围:仅作用于队列(
apply-to:queues
)。
参数解析
参数 | 说明 |
---|---|
-X PUT |
使用 HTTP PUT 方法 |
-H "Content-Type: application/json" |
声明请求体为 JSON 格式 |
-d "{\"pattern\":...}" |
JSON 请求体(需转义双引号) |
"http://.../policies/%2F/auto-delete-queues" |
策略保存路径(%2F 是虚拟主机 / ) |
JSON 关键字段
字段 | 值 | 说明 |
---|---|---|
pattern |
^ai-tpp-pm.* |
正则匹配队列名前缀 |
definition.expires |
10000 |
队列空闲 10 秒后删除 |
apply-to |
queues |
策略仅应用于队列 |
适用场景
- 需批量清理符合特定命名规则的临时队列。
- 避免队列残留(如测试环境或动态生成的队列)。
3. 主要区别
删除单条队列 | 创建自动删除策略 | |
---|---|---|
HTTP 方法 | DELETE |
PUT |
目标 | 直接操作队列 | 定义策略规则 |
影响范围 | 单个队列 | 所有匹配队列 |
执行时机 | 立即生效 | 满足条件时触发(如空闲超时) |
4. 常见问题
Q1:为什么策略中的 .
需要转义为 \.
?
- RabbitMQ 策略使用 正则表达式 匹配队列名,
.
在正则中表示“任意字符”,需转义为\.
才能匹配实际的点号。
Q2:expires:10000
的单位是什么?
- 单位是 毫秒(10 秒 = 10000 毫秒)。
Q3:如何验证策略是否生效?
curl -u admin:rmq@1234 "http://10.11.64.12:15672/api/policies/%2F"
或登录 RabbitMQ 管理界面查看 Policies 标签页。
5. 注意事项
- 权限要求:用户需具备
administrator
标签或至少policymaker
权限。 - 生产环境慎用:自动删除策略可能导致重要队列被误删,建议先在测试环境验证。
- 队列锁定:如果队列正在使用(有消费者连接),可能不会立即删除。
根据需求选择直接删除或自动化策略!