配置优先级队列

最近更新时间:2025-08-26 14:59:12

我的收藏
优先级队列是 RabbitMQ 中一种特殊的队列类型,它允许消息按照预设的优先级顺序被消费。与普通队列的 FIFO(先进先出)机制不同,优先级队列会根据消息的优先级属性(priority)重新排序,确保高优先级的消息能够优先被消费者获取和处理。

核心特点

优先级范围:支持0-255共256个优先级级别,数字越大优先级越高。
内存排序:所有消息在内存中按优先级排序,可能增加内存消耗。
性能影响:排序操作会带来额外的 CPU 开销。
混合模式:可与持久化、TTL 等特性组合使用。

应用场景

紧急任务处理:如电商系统中的订单取消请求(高优先级)应优先于普通订单(低优先级)处理。
告警系统:不同级别的告警消息(如 CRITICAL > WARNING > INFO)需要差异化处理。
VIP 客户服务:为高级别客户的消息分配更高优先级。
资源调度:重要后台任务优先获取计算资源。

约束与限制

仅开源托管版集群支持配置优先级队列,Serverless 版集群暂不支持。

配置队列的消息优先级范围

在创建 Queue 时,在其他高级选项中设置队列中消息的优先级最大值。具体步骤请参考创建 Queue
配置该队列中的消息的最大优先级,可选范围:[0,255],值越大,排序开销越高。
配置该参数后将启用优先级功能,生产者发送消息时通过 priority 属性指定优先级(0到 Maximum Priority 之间)。高优先级消息会优先被消费,未设置优先级的消息默认为 0。


发送优先级消息

以 Java 客户端为例,发送带优先级属性(priority)的消息。
// 创建带优先级的消息属性
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
.priority(5) // 设置优先级为5(范围0-255)
.deliveryMode(2) // 持久化消息
.build();

// 发送消息
channel.basicPublish(
"exchange.direct", // 交换机名称
"priority.routing", // 路由键
properties, // 消息属性
"重要订单数据".getBytes() // 消息体
);