MQ使用过程中,有些业务场景需要我们保证顺序消费,而如果一个Producer,一个Queue,多个Consumer的情况下是无法保证顺序的
举例:
1、业务上产生三条消息,分别是对数据的增加、修改、删除,而如果没有保证顺序消费,结果可能是删除、修改、增加,本来数据最终要删除
、结果变成增加
2、或者是电商平台,先付钱,然后生成订单,然后通知物流(我对电商不怎么熟悉,这只是个例子而已,可能不太恰当),如果顺序改变了,
客户不付钱了,你却通知物流送货了
所以,这些业务场景下,消息的顺序消费很重要
解决方案:
1、一个Queue对应一下Consumer,把需要保证顺序的message都发送到一个queue当中,关闭autoack,prefetchCount=1,每次只消费
一条信息,处理过后进行手工ack,然后接收下一条message,只是由一个Consumer进行处理
这里说一下,如果还是多个Consumer,使用同步处理,手工ack是不行的,第一时间每个Consumer都会收到message(如果message数量>
consumer数量),剩余的message才会等到ack之后发送过来,所以还是无法保证顺序消费
2、上面的解决方案只是个人一些简单理解,真正的生产环境的方案很复杂,下面是大神的解决方案<