本文主要介绍RocketMQ中消息优先级的设置方法。
一.JMS中JMSPriority
JMSPriority 头字段包含了消息的优先级。在消息被发送的时候,这个字段被忽略,当消息发送完成后,它持有了发送方法指定的值。 JMS定义了10级的优先级, 0作为最低级, 9是最高级。除此之外,客户端可以认为0-4级是普通优先级,而5-9作为加速优先级。 JMS不强迫提供者严格实现消息的优先级顺序,但是,最好实现加速消息先于普通消息。JMS规范地址:
二.RocketMQ中消息优先级
RocketMQ 并不遵循任何规范,但参考了各种规范的设计思想。考虑到持久化的消息按照优先级排序开销大,RocketMQ 没有特意支持消息优先级。查看了代码,在Message的API中,的确没有提供和Priority(优先级)有关的方法。
有两种变通的处理思路供参考:
1.使用消息队列来表示不同的优先级:单独配置一个优先级高的队列,和一个普通优先级的队列, 将不同优先级发送到不同队列即可;
2.使用Topic来表示不同的优先级:每个优先级可以用不同的 topic 表示,发消息时,指定不同的 topic 来表示优先级。