1. 为什么基于MQ来传输数据会出现消息乱序?
其实非常简单,之前有介绍过,可以给每个Topic指定多个MessageQueue,然后你写入消息得到时候,其实会把消息均匀分发给不同的MessageQueue的。原本有顺序的消息,完全有可能被分发到不同的MessageQueue中去。
当消费者获取消息的时候,可能会部署多台机器组成一个Consumer Group,对于Consumer Group中的每台机器都会负责消费一部分MessageQueue的消息,所以可能一台机器从ConsumerQueue1中获取消息,一台机器从ConsumerQueue2中获取消息,所以完全有可能一个消费者节点先获取了后发到MQ中的消息进行处理。
2. 在RocketMQ中,如何解决订单数据库同步的消息乱序问题?
让属于同一个订单的消息进入一个MessageQueue
所以要解决这个消息的乱序问题,最根本的方法其实非常简单,就是得想办法让一个订单的消息进入到一个MessageQueue里去。
举个例子,比如对一个订单,先后执行了insert、update两条SQL语句,那么我们现在就必须要想办法让这个订单的2个消息都直接进入到Topic下的MessageQueue里去。
那么我们这个时候应该怎么做呢