00:00
前面呢,我们安装好了re MQ,那接下来我们就来测试一下re MQ的使用,主要我们要测试一下交换机exchanges和我们的quis到底是怎么工作和使用的,这exchanges呢,我们上一次创建了一个虚拟主机,里边有非常多的这个默认交换机,那可以把这个虚拟主机给大家删掉,现在就留一个点击我们这个虚拟主机要删除,在下边delete,那删除这个虚拟主机,那删了以后呢,我现在只留下我们一个虚拟主机,就是这个杠,然后我们接下来来测试它里边的交换机和一些队列。那首先我们来考虑上一个运行机制,在我们这个re MQ里边,首先我们的这个producer,我们这个消息的生产者产生一个消息,消息先发给我们的broker,就是我们的消息服务器,消息代理,由代理呢先将消息要交给我们指定的exchange交换机,然后呢,这个交换机可能下边会绑定了非常多的队列,所以呢交换机,一个交换机跟很多种队列都有绑定关系,那么一个交换机呢,可以绑定很多队列123,但一个队列也可以被多个交换机都来绑定,所以呢,他们之间有非常复杂的绑定关系。接下来就由交换机决定我们这个消息要按照什么绑定关系,路由给我们哪个消息队列,我们的QS,那我们的这个关系呢,我们就叫消息路由,我们整个过程呢,就是消息路由的过程,那这个路由是要根据我们。
01:37
它的消息的这个路由件来决定的,而且呢,由于我们这个消息先是发送给交换机,所以呢,交换机不一样,它绑定关系不一样,最终到路由到的地方也不一样,我们收消费者收到的消息也就不一样,所以我们主要来说一下我们的这个交换机的这些类型,在我们rabbit MQ里边,我们这个交换机类型有非常多的区分,这个类型呢,其实是我们高级消息队列协议里边对它的这些划分,那这个划分呢,我们现在目前主要我们四种类型,Direct,我们称为直接find,这叫扇出,扇出就是我们的一个扇形的样子,我们全部呢出去,然后还有一个topic topic呢就是主题,主题我们以前听过是发布订阅那种模式叫主题,还有headers,那么虽然有这么四种交换机,但是呢,我们说这个direct和headers,它们属于一致的。它们都是我们。
02:37
以前GMS我们说的点对点通信的实现,而我们final和topic这都是发布订阅的一些现,而且呢head性能比较低下,所以我们这个呢,基本不会用到,我们就不说了,我们现在都主要来说direct final和topic这三种不同类型的交换机,交换机的类型不同,最终我们这个消息路由到的地方就不一样。首先我们来说第一种交换机叫direct exchange,叫直接交换机,这直接交换机就是我们说的。
03:10
他将消息直接交给一个指定的队列,路由件呢是要按照我们绑定关系精确匹配,比如那现在呢,这有一个直接叫换机这个exchange,它呢绑定了三个队列,那第一个队列,比如我绑定的名字叫dog,第二个队列我们绑定了一个名字叫dog god,诶比如我们有一个名字dog.god然后第三个队列呢,我们绑定了一个dog.put如果说我们发送一个消息过来,我们用的路由件叫do,那呢,它就会精确的只发给我们这个消息队列,这就叫直接类型交换机实现我们消息只能最终到达一个队列,我们把这种呢就叫完全匹配路由键的完全匹配,它要跟路由键进行完全匹配一模一样,才会交给我们指定的队列。当路由件是跟交换机和队列的绑定关系来进行匹配的,这是我们说的直接交换机。我们。
04:10
也称为单播模式,那们也称为点对点通信模式,接下来我们还有一个叫final final not这种类型的交换机,同样的假设呢,它绑定了多个队列,这种类型的交换机呢,是实现我们发布订阅的,而且呢,它直接是我们广播类型,什么叫广播,就是呢,我们如果交换机下绑定了三个队列,消息一到达交换机,这三个队列呢,都会收到,我们把这个消息呢,会广播出去,根本不关心路由件是什么,所以呢,我们这个。是我们说的广播模式,把所有的消息全部通过这个交换机广播给他绑定的所有队列,还有一个叫topic,这个是我们最复杂的一个交换机,它呢是发布订阅模式,发布订阅模式跟广播模式其实是一个模式,但是广播呢是不分路由件,直接将消息交给所有跟它绑定了的队列,而我们这个topic exchange,如果我们是这种主题类型的交换机,虽然呢,它也是广播模式,要把数据呢发出去,比如他绑定了几个交换机,但呢它可以挑,我只给这135,比如给这三个交换机来发,这两个不发,所以它是部分广播,这个就是主题发布订阅模式,那这个跟这个交换机的区别在哪?我们上一个交换机不区分路由件,而下一个交换机,我们假设呢,我们这有一个交换机,我们。
05:46
绑定了我们这四个队列,而且队列当时绑定的时候,我们比如用的件不一样,那么最终产生的结果就不一样。比如看我们这个例子,假设我们这个交换机跟我们第一个队列绑定,用的路由件叫USA,点一个景,诶我们发现呢,它这一块可以写一个类似于符,所以我们说在我们这个发布订阅模式情况下,我们这个绑定关系可以来写一个通配符,这个通配符可以允许由井号和星号,而且呢,这个绑定关系的这个绑定键,它是由单词分割的,我们一个点分割一个单词,比如一个单词点一个单词,再点一个单词,然后呢,我们在单词出现的位置可以来写我们这些通配符,如果我们来替换成一个井号通配符,井号呢,代表匹配零个或多个单词,意思就是。
06:46
我的这个位置可以有一个单词,也可以没有,注意我们是单词级别的匹配,不能匹配到字母,比如我们ABC只有AB,然后C这个位置呢,随便匹配,我们不能匹配,我们现在呢是匹配单词,所以呢,井号代表我们这个位置可以有或者没有一个单词,而星号如果我们前边用星号来替换,那就是我们星号这个位置必须出现一个单词,星号呢是用来匹配一个单词,那这样我们来假设我们的这个交换机,它是一个topic exchange我们主题模式的交换机,然后呢,它跟我们第一个红色队列它绑定,用的这个绑定键叫USA点井,意思呢,我们后边USA前面是固定的,后边呢必须拥有零个或多个单词,也后边可以有单词,也可以没有单词,比如我们跟第二个这个队列,我们绑定关系呢,叫。
07:46
点news,那这个景呢,代表零个或多个,也就是后缀是固定的,前面呢可以有或者没有一个单词,然后我们跟第三个队列绑定叫景点whether,然后边是一样的,前边呢必须出现零个或一个单词,我们跟第四个队列绑定的是Europe,点景,那么后边呢,可以匹配零个或多个单词。那接下来如果我们发消息,消息我们用的路由键不一样,最终抵达就不一样,假设呢,我们发的第一个消息,我们用的路由件叫usa.news我们发现呢,我们这个路由件是两个单词,那它能匹配上哪个呢?我们先来看,首先它满足我们这个绑定键匹配的模式是以USA开头,后边呢可以出现或者不出现单词,所以我们这个消息通过这个交换机会根据我们这个绑定关系凝匹配,最终到达我们这个队列,这是我们第一个。同时我们这个消息还会。
08:46
到达哪个队列,我们会发现它呢?还有一个单词叫news,我们之前有一个绑定关系叫什么点news,就是我们后边只要有news,前边有没有什么都行,所以我们这个消息它还会被派发给我们这个绑定键叫什么景点news,能以news结尾的,所以我们第一个消息呢,就会派发这两处这一个。
09:11
这一个,然后看我们第二个消息,如果我们叫usa.whethera那呢它满足这个模式,首先以USA开头,它会被发给第一个队列,然后呢,它又以whether结尾,我发现呢,这个队列绑定的是以whether结尾的,所以呢,它又会被派给这个队列。同样如果我们第三个消息,我们用的叫europe.news那么它首先会发送给我们以Europe开头的这个队列,诶,我们这个队列呢,绑定价叫Europe,那么这个消息呢,就会发送过来。同样它又是以news结尾的,我们来看,哎,我们第二个队列呢,正好能匹配这些以news结尾的,所以这个消息呢,还会被发过来,再假设我们第四个消息,我们又是以Europe开头,所以我们就会来到这个队列来一份,而我们呢,是以weather结尾,我们这个队列绑定的时候,我们可以允许以whether结尾的,这样就会来一份。所以总结起来,我们这个绑定键写了什么?你说是以USA开头的所有,那只要是以USA开的,所有消息都会到达我们这个队列,你说是以news结尾,那只要以news结尾的所有消息也都会到达这个队列,他说是以weather结尾,那就以weather结尾的所有消息都会到达这个队列,他说以Europe开头,那以Europe开头的所有消息都会到达这个队列。所以呢,我们发现。
10:41
这种呢是通过模式匹配来决定我们这个消息最终到达哪个队列的,当然呢,这也是一个发布订阅模型,上边呢,这个也是一个发布订阅模型,但是它是一个广播模式,无条件将消息发给所有绑定好的队列,它呢是根据路由件匹配发给队列,而我们上一个我们的direct,它呢就是直接交换机,它就是直接匹配路由件,必须跟它精确匹配才能到达指定的队列。
11:14
那我们用RAMQ主要呢,就要玩转这几个交换机,玩转清楚了,那么接下来就可以搭建出非常复杂的各种路由机制。我们的消息就会到达指定的位置,只要消息一到达队列,别人只要有人去来监听我们这个队列里边的内容,注意发消息是发给交换机,监听消息是来监听队列,然后呢,交换机把消息交给队列了,我们别的监听这个队列里边内容的人都会拿到队列里边的消息,这是我们说的交换机的这些类型,那么接下来就可以在我们整个re MQ里边测试一下我们要用的这些类型,比如我们这个交换机MQ,我们默认安装好以后,在我们这个虚拟主机下会默认有我们七个交换机,两个direct类型,那就是直接交换机,还有一个final,我们删出的两个header的,一个topic的,那么自己来创建一些交换机来测试一下,比如我们来创建第一个交换机,我们就叫exchange direct,比如我们就叫my exchange director,我们创建了一个直接类型的交换机,好,我们来选中交换。
12:24
机的类型direct,我们再来选中它呢?是什么类型,它是一个直接类型的交换机,相当于路由件,要完全匹配才能路由到你指定队列。还有我们这个一个叫durability,也就说我们是否持久化的,那如果我们选中duable,那就是持久化的transcent,那就是临时的,那临时的话,我们这个re mq1重启,我们这个交换机就没了,所以呢,我们交换机创建,我们默认可以让它是持久化的。还有我们的这个auto delete是否自动删除这一块呢,都有提示,我们点一个问号,如果我们设为yes,我们这个交换机呢,将会自动删除自己。什么时候就是呢,At least one,比如说至少我们有一个队列或者交换机绑定到这个上边,也就说我们这个交换机如果没有绑定什么东西,那它就会自动删除掉,包括呢,这还有一个叫internal,我们这个交换机呢,是不是我们内部的这个交换机,如果是内部的交换机,我们的客户端clients就不能给我们交换机。
13:24
来发消息,它只是供我们内部的一些比如转发路由使用的,那这两个呢,都来保持默认,那现在先来创建第一个交换机叫my exchange direct,好,来创建出一个交换机,那接下来我们都知道交换机必须跟队列来进行绑定才能工作,消息呢要发给交换机,所以我们来点进这个交换机,我们会看到我们在这个交换机里边会有一个叫publish message,我们可以给里边发消息,但这个交换机呢,默认没有任何绑定关系,所以呢,我们可以先为交换机来绑定一个队列,所以呢,我们想要绑定队列,我们就必须先来创建一个队列,比如我们在这来按a new q,我们创建一个队列,队列的名字我们可以在这来指定一下,这个队列呢是否持久化的,是否自动删除的,包括什么情况下自动删除这一块都会提示,比方说只要没有人去来连接监听我们这个队列里边的内容,它呢就会自动。
14:24
删除好,我们就先来创建一个非常普通的队列,我们来添加上这个队列呢,只要创建好这一块,什么都准备就绪,诶我们队列呢是空闲的,那接下来我们就可以将交换机和队列来进行一个绑定,所以绑定该怎么操作来到我们这个交换机里边,那这样呢,刚才创建了一个my exchange direct们点进来,们想要绑定在这里边呢,有一个绑ings,在交换机里边,我们要进行一个绑定,我们操作这个绑定,我们把交换机绑定到什么?诶,我发现这一块可以操作交换机,也可以跟交换机绑定,交换机也可以跟队列绑定,如果交换机绑交换机了,这个交换机再绑队列了,所以我们就可能会有多层路由,而我们现在呢,直接就绑上一个交换机,这一块呢,接下来写交换机的名字,我们刚才创建了一个交换机叫an硅谷,接下来注意绑定的时候一定要写路由键。
15:23
假设我们现在队列名叫什么,我们路由件就叫什么,我们就叫an硅谷,好,我们来点一个B1创建以后呢,我们发现点进我们这个交换机,那交换机的绑定关系里边,那呢,To就代表我跟at特硅谷这个队列进行绑定,用的路由件是什么?在这儿就有,我们想解除这个绑定,我们还可以点击unbo来解除绑定,这一块呢,就是在我们可视化界面来创建一个交换机们点进exchanges里边,在这创建一个交换机,再来创建一个队列,然后呢把它们来进行绑定的整个操作,那下一节课我们就来参照我们这个文档,我们创建出各种不同类型的交换机,并且创建好它们之间的绑定关系来测试一下。
我来说两句