赞
踩
消息队列中的若干消息如果是对同一个数据进行操作, 这些操作具有前后关系, 必须要按前后的顺序执行, 否则就会造成数据异常.
第一种情况:
一个queue, 有多个consumer去消费, 这样就会造成顺序的错误, consumer从MQ里面读取数据是有序的, 但是每个consumer的执行时间是不固定的, 无法保证先读到消息的consumer一定先完成操作, 这样就会出现消息并没有按照顺序执行, 造成数据顺序错误.
第二种情况:
一个queue对应一个consumer, 但是consumer里面进行了多线程消费, 这样也会造成消息消费顺序错误.
第一种方案:
拆分多个queue, 每一个queue一个consumer, 就是多一些queue而已, 确实是麻烦点; 这样也会造成吞吐量下降, 可以在消费者内部采用多线程的方式去消费.
第二种方案:
就是一个queue对应一个consumer, 然后这个consumer内部用内存队列做排队, 然后分发给底层不同的worker来处理.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。