00:03
好,那么了解了这个摄影消息啊,我们来看一下这个有序性分类,这个有序性啊,我们说根据有序范围的不同,Q可以严格的保证。两种消息的游戏性。一个叫分区游戏,一个叫全局游戏。那么我们先看这个全局有序啊。呃,拳击游戏。他说,当发送和消费参与的Q。只有一个时所保证的有序是整个topic消息的顺序。是整个中消息的顺序。成为全局游戏,也就是说我整个这个topic里边就一个Q,所以我发送只能发送到一个,我消费只能消费者一个。所有的消息都在它里边。所以这个叫什么叫全局。当然这里边啊,嗯,就是我我指定啊,我们大家知道默认的这个topic啊,呃,它的Q的数量是四,我们怎么指定,其实我们。
01:10
是不是这里面刚刚。我们刚刚说过。是不是在这儿?是吧,我定义生产者的时候可以指定吗?对不对,但这种指令方式啊,实际上是什么?就是你在创建自动通过自动给我们创建这个。呃,这个topic,然后创建的时候会按照你指定的给你创建的Q。还有什么,我们手动创建,手动创建topic在哪?我们前面也见过啊,在这。主题。对吧,我们给这新增。是,请走。你看。是吧,啊,我们啊新增的这个主题是吧,然后你看主题名啊,然后你这个是啊这个。
02:00
呃,写写就是队列的数量,我们读写队列,前面给大家说过这个呀,是不是一般都是一样的啊,不一样的情况,我们前面详细给大家分析过,这是它的分线246嘛。我们说过的,所以在这儿可以指定。对吧。你当然还有个地方也能指定在哪儿,在这儿。那我们前面说过的啊,这个MQ的命命令。MQ命令,嗯,就是这个这个命令啊,详细的东西啊,我们大家可以从这来看,我们通过命令的方式也可以。就是呃,手动创带手动创建我们。他们给他收来指定。我们Q的数量。呃,给大家这样,给大家总结一下啊,给大家总结一下。嗯。在呃。
03:00
创建。是。呃。在创建topic时,呃,指定这个这个这个。数量。那么有有。嗯。有三种。确定。第一个。呃,就是我们刚才说的在。呃,代码中创建。R可以指令这个是什么,是自动啊,自动创建的。匹克的。数量。对吧,这第一个。第二个我们,呃。在哪在在这个。呃,可。
04:03
格式化。呃,控制台吧。呃,控制台。我们有可视化控制台来叫,就叫这个名。叫叫叫叫,这个就是Q控制台是吧,在。呃,可视化控制台中这个。这是手工啊,你注意这这手动吧,手动它不是自动的,这是手动创建。Topic是指定。指定。是吧,第三个第三个是呃。使用我们这个叫I'q me啊。啊。命令。然后。手动。Topic。
05:01
指定。对吧,啊,这三种我们都可以指定数量,哎,你看这不是一个吗?哎,我就可以这样设置啊。然后我们再看这个分区游戏啊,分区游戏什么,如果有多个Q参与。都Q。而其仅可保证在该Q分区上。分区队列上的消息的顺序称为。千万飞机游戏。你像他这个怎么做啊,我们看这个图。这同是这样的啊,它有三个队列啊,我在发送我生产的消息啊,这里边是ORDER1ORDER2O23 order3是吧,就order是我们订单订单号。那么我根据这个订单号,怎么O1的都发到它里边,O2的发到它里边,O3的发到它里边。那消费的话,他只消费O点一的,他只消费O2的,他只消费点三的。这样的话,你发送的这个顺序和你消费的顺序,你肯定是一样的。
06:04
对不对,他肯定是一样的。嗯。这里边儿啊。其实就有一些新的问题了。就是我们选择Q的时候,我这个消息啊,为什么O1的就都能发到它里边,为什么O2的都能发到它里边。是怎么样实现Q的选择的?是。就是,呃。如何实现?To的选择就是我们,我们怎么做嘛啊,我们怎么做。其实就是在我们就是说代码啊,代码里边呢啊,我们可以。我们可以制定一个Q选择器。而这Q选择器啊,需要在什么时候指定的,在我们创建produce producer的时候,你就给他指定好你的选择器。
07:03
这样的话,它在发送的时候就会按照你这个选择器。先选好用的Q,然后再给你发过去,所以呢是。呃,在定义。Producer,我们指定消息。队列选择。呃,而这个选择器是。是什么?是我们?自己啊自己,呃,实现了。呃,叫Q啊,消息队列。选择器。实现了这个接口。对。定义的。明白吧,啊,这是这是我们我们。
08:01
这个定义好了以后,在这儿给他指定就可以了。那么说到这儿啊,我们说到这更更深入一些啊,更深入一些,呃,便于我们一会儿代码,这个写代码的时候,呃,大家好理解。就我们我在定义它定义这个选择器的时候。里边一般会涉及到一个概念叫什么叫选择K。但定义选择。T。的选择。算法是啊,一般呃,需要需要使用。要选择P。这个选择P啊,呃,是个什么东西啊,这个选择。是。可以是什么?消息。呃,我们消息K和选择K啊是两码事。是两码事啊,就是你你你一般情况下啊,我们选择可是谁是消息K,但你也可以用其他的。
09:07
所以这是概念上你要理解啊,呃,这个选择K可以是消息,K也可以是其他数都行。但是。不管是谁。有一个要求。就都不能重复。但。无论。谁谁做?不能。都是什么?都是唯一的,而这是我我们我们需要呃,注意的是吧,需要注意的。呃,那这个就是有了选择K和五,我们这个选择算法啊,一般情况下,因为这里边儿有一些通用性的做法就是啊一般呃,一般性的嗯。
10:02
选择。算法。是什么?其实很简单。啊,就是让你这个K和我这个Q数量,就你的topic的Q的数量干嘛取模。你最后取目的的结果就是你选择出的那个Q的QID,就是很简单。是吧,啊一般性啊,一般性的选择算法是。让选择。P。呃,与。该。Topic。呃呃,这个怎么说呢,所包含的这个Q的数量。嗯。曲曲模。对吧,啊,其结果呃,即为选择书的。是的。Q。ID。呃,当然这里边其实还有个问题啊,就是我们这个选择K,我们这个选择K啊,呃,是个什么东西啊,你你你和他取模,你就得是个。
11:08
整形的是吧,那那你像我这个啊,我这个就不是。你看这个我这个是,呃叫我这个是就叫就叫订单T,呃,他他他怎么曲模,那这这没法,它它字符串是吧,它是字符串,那那好说。我们就让选择题是什么。他的喊一句。你你你要是整形的,你能去摸你就去摸是吧,然后不能的你就用哈值。但是。这其实有一个新的问题。我为什么单独把这个哈值这样给大家说,是因为一旦你用了哈一值,它会出现一个。形容问题,你要不用含蓄值啊,它肯定是没有问题的。
12:01
不用还一值啊是是呃。不用汉值也不能说他肯定是没有问题的啊,但你用了汉译值以后,其实用这道用不用汉译值啊,其实都都存在这个问题。呃,曲模啊。曲目。算法和存在的一个。什么问题呢?啊,就是这个曲目的结果。就是就是啊不同选择。Key。啊。不同选择K。呃。AAA。数量。去摸结果。可能。可能会是相同的,这这这肯定是啊,我就说了这个不不管你是是是呃是是这个这个消息key,呃呃,你选择K是是这个还是哈希值啊,那他都有可能。
13:14
是相同的。对吧。我消息很多呀,啊,我我选择K很多呀,选择K很多,你消息,比如说你Q数量就三个,而我。我选择P可能。可能这个这个20个或者30个。那相当于什么,你肯定是每一个,就每十个,你要30个选择K的话,那十个有十个,呃,都会。就是就是就是落到一个Q。对吧,或者每个Q上会会出现什么十个选择题对吧。所以那那这就会出问题啊,那不同选择Q与Q数量取模的结果可能会是相同的。
14:07
GG什么?呃,不同选择。T的消息可能会。呃,出现。呃。相同。相同的。对不对。你要出现在相同的Q,那意味着什么?G。同一个。Consumer。可能。呃,这个。消费到不同选择。新的消息。对不对。这就是问题呀。这就是问题,那那那那这个问题。
15:05
怎么解决?你注意啊,代码是我们自己写的。我们自己写的,那你要解决它很好说,我们只需要。对,获取到的这个消息。怎么?消息的K进行判断就行了。是啊,就是我们一般性的。做法是。呃,从消息中获取到。哦。选择题。嗯。对齐。判断。对吧,呃。呃,这个这个判断就是你你你如果是,呃,若是当前。啊。好兄们,嗯。
16:03
需要消费的消息。的直接消费。啊,不是。否则呢,啊。啊。什么?什么也不。嗯。什么也不做就行了。这是不是要解决这个问题?所以这个问题很好解决,你注意啊。不过这又隐含了一个新的问题。什么问题,那就意味着啊,就是这种情况下,就就就就就意味着我的得能获取到这个。就是就是这个选择T啊。或者说这个选择题需要随着消息罐传过来。对不对啊。这种。这种。做法。要求。选择T。
17:00
呃,要。能够啊,这个这个怎么说呢。呃,随着。消息。一起。呃。一起背。啊们。好,行。这个。获取到,所以。所以。或者不要说了,此时此时啊呃,使用这个消息。作为选择。是比较。因为你这儿我们这儿说过啊,这个选择题可以是消息,可也可以是其他数据。但你要其他数据,数据能不能随着消息传过来,这个不一定。而你这样一个做法的要求什么要求你给传过来,所以我们怎么传,那那我给它放到这个。
18:07
作为消息出现,这是最好的。是吧?这是最好的啊,就这里边就隐隐隐隐含的一些,呃,新新的问题。不过这样一说啊,你知道吧,就是。呃,叫什么人人好说一句话叫细思极恐,嗯,你你再仔细考虑一下,这样其实就会发现另外一个新的问题。啊,以上。做法啊,呃,就是。这样说吧,会不会?出现。嗯。这个。如。如下新的。问题。问题什么问题?大家想一下啊。我这个消息。我把这个这个这个这个这个叫什么,呃,这个这个选择K啊,这个选择K的消息我读过来了,一看是我消费的,我就给他消费了,我不是我消费,我什么不做,你要知道什么也不做。
19:12
你不管你做不做,这个消息是不是已经被拉取过来了?对不对。只要被拉起了,就相当于被消费了。现在你把它拉取过来,你把它读过来,又又又什么也不做。那别人要消费这个。另外的consumer要消费这个选择题的消息,还能消费到吗?是不是这这这个问题大家能理解了吗。就是啊,怎么说呢。啊,不属于呃那个啊,大家怎么好理解的,我老六给大家怎么写啊,这个口语化一些了啊,不属于那个consumer。而不属于那个consumer的消息。
20:02
拉。来拉去走了对吧,那么。呃,应该消费。该消息的。是否?还能在。还能在。呃,消费的。消息。相信呢?能不能呢?这里边儿我们就需要再思考一个问题,就是看你前面掌握的知识怎么样。大家想一下。看着啊。这是我的Q。呃。这这是我的Q是吧,这个Q。那。刚才的意思啊,说啊,我我我这个啊,这consumer我把它读过来了啊,比如说啊,我咔嚓,我读过来十条消息,这十条啊,这这里边有十条消息啊,读过来十条,其实这里边十条消息里边只有两条是我需要的。
21:09
我这儿需要的。另外八条是不是我需要的?另外八条是谁需要的?假设另外八条都是他需要的。那你现在一下把它,把它这十条都读过来了,那我还能再消费,我在读的时候还能把它把它读过来吗?硬把它读走了。是不是现在问题是这样,其实我给大家说,你要能问到这个问题啊,说明你。你你,你还善于思考,但是。你思考的深度还不够。为什么我们前面说过呀。一个Q。能不能被同一个consumer group里边的两个或者多个同时消费?不可能啊。对不对,不可能啊,所以啊大家看。
22:04
呃,同一个啊。中的消息。呃。不可能被。同一个。我直接写group了,就不说这个group了啊,Group中的这个这个不同。Consumer。同时。对吧,所以。消费。同一个。Q的。Q。呃,不同选择题的。消息啊。好,下面。一定。一定属于不同。的。啊,这个。
23:01
而不同的。中的。Consumer。间的消费是什么。相互?隔离的。不,不。影响的。是吧?会不会出现这个新的问题呢?不会。因为他们是相互隔离的。是互不影响的。明白吧,OKOK,这是你看啊,老雷在这给大家很深入的把这个全局消息和分区,分区啊,分区有序啊,或者分区消息啊,这个给大家这这个或具体确切的说是分区有序啊,这个分区有比较比较复杂一些。啊,我们大多数情况用的实际上是分区有序啊,分区顺序消息。把这个我们深入给大家进行了一个解析。
24:02
啊,你理解的怎么样呢。OK了。
我来说两句