RocketMQ消息优先级

有些场景,需要应用程序处理几种类型的消息,不同消息的优先级不同。RocketMQ是个先入先出的队列,不支持消息级别或者Topic级别的优先级。业务中简单的优先级需求,可以通过间接的方式解决,下面列举三种优先级相关需求的具体处理方法。

第一种

多个不同的消息类型使用同一个topic时,由于某一个种消息流量非常大,导致其他类型的消息无法及时消费,造成不公平,所以把流量大的类型消息在一个单独的Topic,其他类型消息在另外一个Topic,应用程序创建两个Consumer,分别订阅不同的Topic,这样就可以了。

第二种

情况和第一种情况类似,但是不用创建大量的Topic举个实际应用场景: 一个订单处理系统,接收从100家快递门店过来的请求,把这些请求通过Producer写入RocketMQ;订单处理程序通过Consumer从队列里读取消息并处理,每天最多处理1万单。如果这100个快递门店中某几个门店订单量大增,比如门店一接了个大客户,一个上午就发出2万单消息请求,这样其他的99家门店可能被迫等待门店的2万单处理完,也就是两天后订单才能被处理,显然很不公平。

这时可以创建一个Topic,设置Topic的MessageQueue数量超过100个,Producer根据订单的门店号,把每个门店的订单写人一个MessageQueue。DefaultMQPushConsumer默认是采用循环的方式逐个读取一个Topic的所有MessageQueue,这样如果某家门店订单量大增,这家门店对应的MessageQueue消息数增多,等待时间增长,但不会造成其他家门店等待时间增长。

DefaultMQPushConsumer默认的pullBatchSize是32,也就是每次从某个MessageQueue读取消息的时候,最多可以读32个。在上面的场景中,为了更加公平,可以把pullBatchSize设置成1。

第三种

强制优先级

TypeA、TypeB、TypeC三类消息。TypeA处于第一优先级,要确保只要有TypeA消息,必须优先处理;TypeB处于第二优先级;TypeC处于第三优先级。对这种要求,或者逻辑更复杂的要求,就要用户自己编码实现优先级控制,如果上述的三类消息在一个Topic里,可以使用PullConsumer,自主控制MessageQueue的遍历,以及消息的读取;如果上述类消息在三个 Topic下,需要启动三个Consumer,实现逻辑控制三个Consumer的消费。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,RocketMQ支持两种消费模式,一种是集群消费(clustering),另一种是广播消费(broadcast)。默认情况下,RocketMQ的消费模式是集群消费。所以,广播优先级是指使用广播消费模式时的优先级。广播消费模式会将消息发送到所有的消费者实例,每个实例都会收到相同的消息。在广播消费模式下,消费者的优先级并不是一个RocketMQ内置的概念。消费者的优先级通常是由应用程序自行管理和实现的,可以通过代码逻辑或者配置文件来指定消费者的优先级。所以,RocketMQ本身并没有广播优先级的概念。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [rocketMq 集群消费和广播消费](https://blog.csdn.net/qq_32655207/article/details/116835901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [RocketMQ基础知识](https://blog.csdn.net/xiaotianshi521/article/details/129703182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值