当前位置: 代码迷 >> 综合 >> Rocketmq 顺序消费的几点建议
  详细解决方案

Rocketmq 顺序消费的几点建议

热度:75   发布时间:2024-02-29 09:36:36.0

为了保证消息消费的有序性,Rocketmq在发送消息时需要通过MessageQueueSelector指定具体发送的consumerQueue。

顺序消费的事件监听器为 MessageListenerOrderly,表示顺序消费。

在使用时,需求注意以下几点:

1. 消费端为了保证有序消费,在拉取消费和消费消息时,都会在broker端获取queue的锁。如果topic的队列个数小于消费组中消费者的个数,会导致多个消费者消费同一个queue,会频繁的获取queue的锁,释放锁,产生竞争 。因此在使用顺序消费的场景时,应尽量设置较大的topic的队列个数,以减少锁冲突,提升消费性能。

2.并发消费消息时,当消费失败时,会默认延迟重试16次。顺序消费消息时,重试次数为 Integer.MAX_VALUE,而且不延迟。换言之,如果某一条消息消费失败且重试始终失败,将会导致后续的消息无法消费,产生消息的积压。因为顺序消费消息时,一定要谨慎处理异常情况。

3.在topic扩容调整队列个数时,有可能会打乱消息对应的队列,出现部分消息并非顺序消费。