00:00
上两节课呢,我们学了一个路由模式,还有一个。呃,发布订阅模式。用到的两个交换机呢,分别是扇出交换机和直接交换机。本节课呢,我们讲什么呢?讲主题交换机。主题交换机有什么好处呢?它比直接交换机和扇形扇出交换机更加的完美。例如。说我们之前做的日志记录系统。我们用过什么呢?叫广播的扇出交换机。完了呢,后来呢,又用了直接交换机来接收指定的日志。我们可以看看之前的图。之前的图在这里。啊,按照这个图来看。生产者发消息给交换机,交换机再通过三个英文单词的关键字再进行路由相应的队列。
01:00
那么这个每一个英文单词呢,长相是不一样的。那么,如果有一天我们需要。既路由队列一,又要路由队列二,那么这就无法实现了,尤其是直接交换机无法实现,因为你路由队列一用的是orange。你路由对立二用的是blank或者是。那么你只能写orange,你不可能既写orange和black,所以呢,对于直接交换机来说,它应该只能路由一个队列。对吧,你要么是路由队列一,你要么呢,就路由队列二,不可能同时路由。对,不可能同时录由,因为它的关键词是完全不一样的,你,Orange black和green不一样。不一样,代码上就没法写,没法写对吧,没法写可以捆绑多个,但是没法发送多个队列。
02:01
针对于这种情况,就出现了下一种叫主题模式,也叫主题交换机。他就能解决这个问题。当什么问题他能解决呢?就是当你想接收的日志类型有info。以及ad等等。那么如果某个队列只想接收消息么?这个时候他就办不到了。这个时候只能用呃,Topic类型,也就是我们的主题类型。这句话呢,并不能理解,那我们接下来看一看下方的一些例子啊,举些例子。首先呢,Topic这个主题交换机,我们先说一说它的一些规范,例如主题交换机的ROK不能随意写,必须满足一定的要求。它必须是一个单词的列表,以逗号分割开。举例说明。比如说。
03:01
是吧,Stock used,哎,Na,这都乱写的,中间用什么隔开用?点对用点啊用点号隔开完了呢,前后呢,最好是一个单词,不能是一个字母,那么单词在英文里面有没有这个意思都不重要,就是哪怕你随便写的一个四个字母形成一个单词,那都那都叫单词。完了,单词与单词之间用点隔开,这是它最基本的一个语法。完了,最长多长呢?最长是255个字节,就是不能超过255个字节。完了,你可以在255个字节以内呢,写多个单词,例如写一个,写两个,写三个,写四个,写五个都可以,每个单词直接用点来进行隔开就可以了。那么这是正常的一个写法。还有一些规范,例如。星号可以代替一个单词。
04:01
井号可以代替零个或者是多个单词。也就是说,星是一个。井是多个,当然井也代表没有,没有也行。那么再往下咱们再看看这个例子啊,看完这个例子呢,我们可能就明白了啊,把图放,把文档放大一点。看这个匹配。它的匹配这么匹配的说,Q1绑定的是中间带有orange的三个单词的一个字符串,那中间是orange orange两边各带一个星,而星刚刚说完。代表一个单词。所以总共几个单词呢,三个单词。对,三个单词完了呢,Q2队列二是吧,绑定的是最后一个单词是rabbit。几个单词,三个单词,所以它的写法是星点点rabbit。完了,还可以说第一个单词是哎,Lies,这个是懒惰是吧?哎,多个单词,注意是多个单词,不是三个单词,是多个,那么这个懒惰单词后面加一个井号,因为井号代表的是零个单词或者是多个单词。
05:16
而星呢,只能代表一个,所以星代表就是一个。那么根据这种情况,你看他出了一张一张图啊,这张图就是他的最终的一张,怎么说呢?实战图吧,完了生生产者发消息给交换机。交换机呢,和队列之间,例如Q1Q2是吧,他们之间就可以这么绑定了,例如。这个orange前后各有一个单词,总共是几个单词呢?三个单词。完了,这个呢,跟二之间绑定的最后一个单词是rabbit,前面有俩单词,总共也是三个单词。完,同时还可以跟Q2绑定,之间是第一个单词是哎,懒惰,我后面可以是多个单词。
06:05
建立了这么三种关系,那么一旦建立这三种关系之后,我们想录由谁就能录由谁了,想发消息给队列一,就能发消息给队列一,想发消息给队列二,那就能发消息给队列二,也可以同时发消息给队列一和队列二。比之前的直接交换机和扇出交换机更加的灵活。我们来一起看一下。这呢?根据上面这张图啊,为了能咱们能把这张图带着一点啊,我们把它截截取一下。好,放在旁边。放在旁边的目的就是我想放在这里,因为上面看不见了,我想放这里。一起来对比一下。好,首先第一个说,如果你发送的一个消息,在接收消息的时候啊,如果你的ROK。是叫这名,你说它会被对列一接收呢,还是被对列二接收呢?经过他的这么一看,看这啊,一定要看这,这是三个单词,中间是orange,你看这是是不是三个单词。
07:15
对,这是三个单词,中间是orange,不是orange,完前后两个单词随意,因为它这星吗?星只要是一个单词就可以,是什么单词都不重要,所以这个会被队列一对,会被队列一啊所接受,来,我们挡一下视线啊,不要看别的啊,不要看别的,就看这啊,就看它啊,完了呢,会被对列一所接受,那会不会被对立二所接受呢?因为它符合谁呢?符合队列当中的这个路由规则,它是以Ruby的结尾的,前面有几个单词,有两个单词,你一个单词,两个单词,所以它也符合去对列二的要求。所以这种ROK会被队列一和队列二都接收到,你看会被队列一队列二都接收到。
08:04
哎,这就特别灵活是吧,之前的直接交换机就做不到这一点,一旦你写orange了,那么只能对零一,不可能去对联。是吧,所以你看他这个就更加的灵活一些。再往下,以此类推,咱们再一起判断判断。例如这个能去哪哪哪哪一个呀。哎,这个能去,你看也被对立一,对立二接收是因为这个符合中间orange符合第三个,哎后面有多个单词,你看第一个懒惰完后面是多个单词。对吧,F完全符合,所以又是被对立一对立二接受。以此类推,第三个呢?只能被队列一接受,为什么?因为中间是orange,你看符合这个,但是并不符合另外两个的规则,你看,所以它符合另外两个规则吗?并不符合,对,不符合。这个呢,这个符合第三个规则,对这呢符合它符合的是第三个的规则。
09:03
你仔细看,是不是只能被队列二接收,对它呢,也是符合第三个。对,但是等会儿,但是它呢,这个符合是不是中间这个rap结尾啊,虽然说它满足了两个绑定,但是只能被对立二接收是因为什么?是因为它符合的这两个规则全都是路由到队列二的,对,都路由到队列二,队列一是orange,所以它依然是只能去队列二。咱们快速看一看啊。这个呢,这个哪儿都去不了,对,因为这个不符合三者的任何一个关系。这个呢?这个符合吗?这个也不符合对吧,不符合。因为你看1234 orange后面只能有一个单词,注意人家是星啊,不是景。井号是多个单词,星是一个单词,所以它不符合第一个,对,那它符合第二个吗?也不符合,第二个是前面两个星,它这都三个单词了,所以也不符合。
10:06
完了最后一个呢,哎,最后一个是符合的,符合谁符合第三个。哎,符合第三个啊,不符合第二个,虽然说它是以它结尾的,但是不符合第二个也它是中间这个也不符合,但是它只符合最后一个,因为它是井号啊,可以是三个单词或者四个单词都可以啊是吧,所以是符合队列二,所以经过这么一些的练习或者匹配是吧,我们终于知道这个主题,注意主题交换机的强大之处。他是这里面最强大的,而且呢,也是是吧。也是使用范围最广的好。当队列绑定关系是下列这些情况时,需要注意了,需要引起注意,这是注意事项。当一个队列绑定的键是井号,那么这个队列将接收所有数据。就有点像扇出交换机了,因为扇出交换机就是那种中间rolling k是个空串吗?还记得吗?是个空串哎,发送方发消息,所有的队列都能收到。
11:14
因为他的roing k都是空串,都是一模一样的,所以他就发布订阅模式,一个人发布,所有人订阅。所以如果一旦你把这个队列呃绑成井号的话,这就表这其实就相当于不是主题模式是吧,相当于有点像这个删出删出交换机了。那如果对立当中借。对吧,绑定键当中没有井号和星啊,井号和星号出现,那么该对立的绑定类型就是什么?就是直接类型。对,就是直接类型,所以说你会发现这个主题交换机其实是包含。删除和呃,定向啊,直接直接直接交换机的。包含。所以呢,咱主题呃,交换机是最强大的,因为它的功能包含了另外两个交换机的功能。
我来说两句