00:02
好,下面呢,我们来看顺序消息。呃,首先来说啊,我们说一下这个什么是顺序消息,因为我们前面其实已经简单了解了一下这个顺序消息了,那么在这我们详细学习一下啊,是吧,这个顺序消息指的是。严格按照消息的发送顺序进行消费的。消息。你看啊,严格按照发送。顺序。进行消费。啊,一个是发送。要按照发送顺序。干嘛消费?也就是说,这实际上是什么?是不是?先进先出。对吧,就是先进先出的啊。那默认情况下胜任者会会把消息啊以轮询是吧?啊round Robin轮询方式发送到不同的Q分区队列。
01:09
而消费。消息时会从多个课里边拉取消息,就我们正常是这样的。这种情况下。呃的发送和消费是不能保证顺序的,因为你有多个队列。然后多个消费者。那他多个队列你发的时候就不知道谁先谁后了。是吧,你发的发到哪个队列了,消费的时候又不知道谁先被消费了。那如果将消息。仅仅发送到同一个Q,你注意同一个Q。那消费时也只能从这个Q上拉取。就保证了。消息的。盛行。哎,这里边儿其实啊,有一个问题隐藏着一个问题啊,大家想一下。
02:04
啊,原来。是什么,这是我的这个里边啊123啊三个Q。然后这是我的consumer是吧,里边有1233个是吧,你原来想保证顺序不好保证。对吧,那现在呢,把宽宽给它去掉了,只能进这一个,所以这个顺序保证了。我想问问大家这个隐含的一个问题,他的。是group里边的。Consumer有几个?有哥们说三个也可以啊,对,三个也可以,但是如果有三个的话。是不是只能有一个会消费?另外俩不能消费啊。那这个我们首先要清楚的就是说它里边啊,你只只能有一个什么group里边只能有一个,相当于就只能有一个consumer。
03:04
另外俩是不能消费的,我们说这种情况一般或者说我们消费者。组里边对应的消费者数量,我们说过是不是一般啊。小于等于。是小于等于Q的数量的。你大于了,你多出来就没有用。对吧,哎,这里面隐隐含着一个问题啊,哎。然后我们再来看啊,那这个肾消息有什么用呢?为什么我们需要。啊,这个顺序消息。这里边通过一个例子啊,通过一个例子对吧,现在有一个topic topic。呃,叫什么呢?叫。就我们订单啊呃。订单状态,呃,现在有卡。呃,现有topic。呃,订单。现有order status是吧,我我怎么怎么给大家写,就就这吧。呃,订单。
04:00
状态吧。是吧,然后呢,它下边有四个对不对。这个topic中不同的消息用于描述当前订单的不同状态。假设订单状态有什么有这样的啊五种啊,未支付,已支付,发货中啊,然后发货成功,发货失败。对吧,有成功失败啊,然后呢。呃,这里边,呃,他说啊,以上订单的状态,生产者从时序上这样说的,从时际上就是我按照时间。呃,按照时间来说的话啊,可能啊,可以上传以下几个消息。但这是一种可能性啊,呃,先是未支付状态。然后是已支付状态,然后是发货中状态,然后是发货失败状态,这里边儿没有那个发货成功。对吧,这四种12344种状态。因为成功和失败,他他只能是呃选其一对吧。
05:02
然后我们消息发送到MQ以后啊,Q的选择如果采用轮询策略,就是说我们先先说到这啊,不能保证顺序的,你看我这个。发送是吧,我发给他,你看这发货中,然后这这个呢,把这个消息。这个发货失败,我放到这儿了,未支付放到这儿了,然后已支付放到这儿了,就放到不同的四个队列了,我消费者消费的时候。那消费的顺序可能会是什么?这是个正确的顺序是吧,啊未支付。已支付发货中,呃,发货失败,这是正确的。那这是什么偏差,就这这这里边儿有偏差的,就是有问题的。这仅仅是列出了三种。其实。有多少种?这种有问题的有多少种?从这个来说。他不是全排列吗。
06:00
对不对啊啊,那那所以他他这个要比这个要多得多。所以这里面就他这种情况下,我们希望consumer的消费。消息的顺序。和我们发送的是一致的,然而上述MQ的投递和呃,这个投递就是我们生产了以后给他发送过去是吧?这个投递投递和消费方式我们无法保证顺序是正确的。对。顺序异常的消息。Consumer即使设置了一定状态容错,就即使你consumer端啊有容错机制,即使设置了容错机制了。那么也不能完全处理好。这么多种随机。出现组合的情况,就是不能说他完全不能解决啊,就你的容错你太麻烦了呀,你把所有的。出现错误的那种状态,你全部都给它列出来。
07:01
那这这这个太麻烦了。是不是?哎,怎么办呢?诶大家看看这。是吧,这看这对吧,基于上述情况啊,可以设计如下方案什么呢?对于相同订单号的消息,相同订单号的消息。而通过一定的策略将其放置到一个Q。你看我整个这里边儿其实有一个啊,让大家看一下。呃,我我这里边儿这些消息有一个共同的特点。就是他的订单号,订单T0001,是不是订单号全部是相同的。是吧?ID是相同的,所以我这说了啊,我通过一定的策略,呃,把相同订单的消息呢,给它放到一个Q里。然后消费者再采取一定的策略。然后哎,你就能够保证我消费的顺性,我消费者我就消费这一个队类里边的。
08:04
采用一定的策略,比如说刚说了一个线程独立处理一个Q,就可以保证消息处理消息的顺序。对不对,哎这是什么?哎,这就是我们他这个为什么我们需要顺序消息。这出问题了,哎,我们。用这种顺消息是吧,就可以解决这样的问题。OK,这先对这个摄影消息啊有所了解。
我来说两句