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上面,这样数据传输是很快的。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值