rabbitMQ消息错乱场景
用rabbitMQ来举例,有下面这种情况。
生产者发送3条消息,分别通过mq给三个不同的消费者处理。那他们是三个处理的时候就有可能会第二个消费者先处理完成,先入了数据库,那这三条数据就可能会造成数据错乱。如果第一条是要插入数据,第二条是要修改数据,那第二个消费者肯定会报错了。
如何保证rabbitMQ消息的顺序性
把我们需要保证顺序的消息,通过同一个queue发送给同一个消费者,由指定消费者处理的话,就可以保证消息是逐条按照顺序被处理
kafka消息错乱场景
kafka的同一个partiton里面的数据肯定是有顺序性的,消费者也是按照顺序性去拿取的,但是消费者拿到消息之后可能使用多个线程处理多条消息,那么也可能会造成最后的消息错乱
那么消费者处理消息的时候我们可以使用内存队列,将需要保证顺序的消息分发到同一个内存队列中,来保证消息处理时还是按照顺序来处理的