优先级消息

更新时间:
复制为 MD 格式

优先级消息为云消息队列 RocketMQ 版中的高级特性消息,本文为您介绍优先级消息的应用场景、功能原理、使用限制和使用建议。

版本要求

  • 实例版本:5.0-rmq-20260304-1 及以上版本。

  • 客户端 gRPC SDK版本:

    • Java SDK:5.2.0及以上版本。

    • 其它语言 SDK:待发布。

应用场景

在分布式系统中,算力、接口配额等资源通常有限。当大量不同重要程度的消息并发涌入时,系统需要识别并优先处理核心业务请求。优先级消息允许生产者在发送消息时为其指定优先级,确保高优先级任务在系统拥塞时被优先消费处理。

AI 算力资源调度与分配

在 AI 业务场景中,算力资源(GPU/NPU)极其稀缺且调度成本高。您可以通过优先级消息实现对波动不稳定请求流的平滑调度:

  • 按任务类型区分优先级:核心业务(如电商实时推荐)的优先级高于实验性模型;在线推理任务(用户实时请求)的优先级高于离线训练任务。

  • 按资源规模匹配优先级:小批量快速验证任务可设置为高优先级,以快速释放资源;大规模预训练任务则根据紧急程度相应降级。

  • 按时间敏感性设置优先级:具有严格截止时间的任务(如自动驾驶模型实时更新)应设置为最高优先级。

接口限流场景

部分第三方服务提供商按账号级别对接口进行统一限流。当多条业务线的消息(如订单处理、状态同步、日志记录)共用同一消费队列时,您可以通过设置优先级,确保订单相关消息被优先处理,避免用户在支付或开通环节产生长时间等待,从而提升核心业务的处理成功率。

运营推送

在社交或店铺等资源管理平台中,当需要向大量群组推送消息时,您可以根据推送内容的实时性要求设置不同优先级。例如,将客服与客户的实时沟通消息设置为高优先级,营销类和通知类消息设置为低优先级,以满足不同的时效性要求。

功能原理

优先级消息是指生产者在发送消息时,为消息设置一个优先级数值。在消息堆积时,云消息队列 RocketMQ 版会尽可能按照优先级由高到低的顺序将消息投递给消费者。

image

其工作流程如下:

  1. 生产者在发送消息前,通过消息属性设置优先级,例如 message.setPriority(int level)

  2. 消息存储时,系统根据消息的优先级将其写入优先级 Topic 下的不同队列,每个队列对应一个优先级。

  3. 消费者从某个 Broker 获取消息时,优先从高优先级队列拉取消息进行消费。

消息优先级在单个 Broker 节点内严格有序,高优先级消息始终优先被消费。跨 Broker 节点不保证全局优先级排序。在分布式部署场景下,各 Broker 由不同消费者并行拉取,整体消费效果为"尽可能优先处理高优先级消息"。

使用限制

  • 优先级范围:默认消息优先级可设置为 09 的整数,数值越大,优先级越高。

  • Topic 级限制:每一个 Topic 可以单独设置允许的最大优先级(默认为 9)。如果需要修改 Topic 的优先级上限,需通过提交工单或联系管理员进行配置。

使用建议

适当调小PushConsumermaxCacheMessageCount

本地缓存队列的消息是不按照优先级排序的,减少PushConsumer的本地缓存队列中的消息量可尽量让未处理的消息按照优先级排序。

使用并发投递的ConsumerGroup消费优先级队列

由于优先级消费要求打破消息的发送顺序,因此它与顺序消息模式互斥。在消费优先级消息时,须将 ConsumerGroup 的 deliveryOrderType 配置为 Concurrently(并发投递)。