RabbitMQ
RabbitMQ 无法做到消息有序的原因:
1.RabbitMQ支持一个队列多个消费者进行消费,并行处理消息无法保证顺序。
2.RabbitMQ支持重试及超时重试机制,这也是导致无法顺序消费的原因(即使只有一个队列一个消费者 )。

RocketMQ
RabbitMQ 实现顺序消费:
1.需要有序的消息投入相同的队列,同时只有一个线程消费(但这个也无法100%解决,重试机制是个坑)。
2.RocketMQ只能保证消息的局部有序,无法保证全局有序。
3.RocketMQ 提供两种消费模式,一种是并行消费模式,另一种是顺序消费模式。当需要顺序消费时,只有保证需要保证顺序的消息进入同一个队列(指定队列),同时设置为顺序消费模式。
4.当设置为顺序消费模式时,消费方式会变成单线程模式,队列上锁。当消费失败时,当前线程会等待一个指定时间,然后再尝试消费这个消息。这个过程会无限次尝试直至消费成功。所以业务方需要做一定失败处理,当失败次达到一定次数,要返回SUCCESS,否则会一直卡在当前消息。

5.但也有个缺陷,在多主从的情况下,无法保证顺序消


2万+

被折叠的 条评论
为什么被折叠?



