本文主要是介绍RocketMq生产常见问题及解决方案(三) 顺序消息和消息堆积的解决法方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.rocketmq中的顺序消息
1.1 rocketmq顺序消息的使用场景
顺序消息分为全局顺序消息和局部顺序消息,在增量同步日志的时候,需要保证消息全局有序,这个时候,我们需要全局顺序消息。而在订单业务常见的一个场景是,每个订单有下单->支付->发货这已操作,需要通过mq同步给第三方,我们在同步的时候需要保证每个单据内这三个操作是有序的就行,这就是局部有序消息。
1.2 rocketmq顺序消息的实思路
1.2.1 局部有序性
1.生产有序性
需要将同一类消息发送到同一个messagequeue中,通过队列的先进先出原则,保证消息的顺序性;并且生产者应该采用单线程的方式发送消息,多线程不能保证发送到messagequeue中的顺序。
2.消费有序性
利用MessageListenerOrderly进行消费,它是单线程进行消费的,并且在消费失败过后,会阻塞后面数据的消费。
1.2.2 全局有序性
其实在topic设置queue只有一个,这样就能保证在这个topic里面的消息都是有序的。
2.rocketmq消息堆积以及解决方式
2.1 常见原因
订阅关系不一致导致消息堆积,在rocketmq中,同一个消费者组,应该订阅的topic和tag信息应该是一模一样的,即消费者组在rocketmq中是作为一个基本单位存在的。
我么有一次发生的问题就是,有一个灰度和非灰度环境,在配置的时候,灰度环境和非灰度环境都属于一个消费者组,但是消费的topic不一样,导致消费者不能消费。
2.2 解决方式
1.检查订阅关系,消费者组应该保持一致;
2.加大消费者组的消费力度,比如采用并发消费的方式,利用线程池消费,增大消费速度。
3.增加topic读写队列的queue的数量,根据rocketmq的消费模型,一个queue的只能被一个消费者
组的一个消费者实例消费,所以增大queue的数量,也能增加消费速度。
4.如果消息已经堆积,可以在rocketmq上面新建一个topic,然后启动一个服务,消费数据并且将其写入到这个新建的topic上面,这样数据传输是很快的。
这篇关于RocketMq生产常见问题及解决方案(三) 顺序消息和消息堆积的解决法方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!