优先级消息为云消息队列 RocketMQ 版中的高级特性消息,本文为您介绍优先级消息的应用场景、功能原理、使用限制和使用建议。
版本要求
实例版本:5.0-rmq-20260304-1 及以上版本。
客户端 gRPC SDK版本:
Java SDK:5.2.0及以上版本。
其它语言 SDK:待发布。
应用场景
在分布式系统中,算力、接口配额等资源通常有限。当大量不同重要程度的消息并发涌入时,系统需要识别并优先处理核心业务请求。优先级消息允许生产者在发送消息时为其指定优先级,确保高优先级任务在系统拥塞时被优先消费处理。
AI 算力资源调度与分配
在 AI 业务场景中,算力资源(GPU/NPU)极其稀缺且调度成本高。您可以通过优先级消息实现对波动不稳定请求流的平滑调度:
按任务类型区分优先级:核心业务(如电商实时推荐)的优先级高于实验性模型;在线推理任务(用户实时请求)的优先级高于离线训练任务。
按资源规模匹配优先级:小批量快速验证任务可设置为高优先级,以快速释放资源;大规模预训练任务则根据紧急程度相应降级。
按时间敏感性设置优先级:具有严格截止时间的任务(如自动驾驶模型实时更新)应设置为最高优先级。
接口限流场景
部分第三方服务提供商按账号级别对接口进行统一限流。当多条业务线的消息(如订单处理、状态同步、日志记录)共用同一消费队列时,您可以通过设置优先级,确保订单相关消息被优先处理,避免用户在支付或开通环节产生长时间等待,从而提升核心业务的处理成功率。
运营推送
在社交或店铺等资源管理平台中,当需要向大量群组推送消息时,您可以根据推送内容的实时性要求设置不同优先级。例如,将客服与客户的实时沟通消息设置为高优先级,营销类和通知类消息设置为低优先级,以满足不同的时效性要求。
功能原理
优先级消息是指生产者在发送消息时,为消息设置一个优先级数值。在消息堆积时,云消息队列 RocketMQ 版会尽可能按照优先级由高到低的顺序将消息投递给消费者。
其工作流程如下:
生产者在发送消息前,通过消息属性设置优先级,例如
message.setPriority(int level)。消息存储时,系统根据消息的优先级将其写入优先级 Topic 下的不同队列,每个队列对应一个优先级。
消费者从某个 Broker 获取消息时,优先从高优先级队列拉取消息进行消费。
消息优先级在单个 Broker 节点内严格有序,高优先级消息始终优先被消费。跨 Broker 节点不保证全局优先级排序。在分布式部署场景下,各 Broker 由不同消费者并行拉取,整体消费效果为"尽可能优先处理高优先级消息"。
使用限制
优先级范围:默认消息优先级可设置为 0至9 的整数,数值越大,优先级越高。
Topic 级限制:每一个 Topic 可以单独设置允许的最大优先级(默认为 9)。如果需要修改 Topic 的优先级上限,需通过提交工单或联系管理员进行配置。
使用建议
适当调小PushConsumer的maxCacheMessageCount值
本地缓存队列的消息是不按照优先级排序的,减少PushConsumer的本地缓存队列中的消息量可尽量让未处理的消息按照优先级排序。
使用并发投递的ConsumerGroup消费优先级队列
由于优先级消费要求打破消息的发送顺序,因此它与顺序消息模式互斥。在消费优先级消息时,须将 ConsumerGroup 的 deliveryOrderType 配置为 Concurrently(并发投递)。