00:00
接下来我们再来测试如何给rabbit MQ里边收发消息。首先我们来测试发送消息,我先来编写上一个方法public world,我就叫send message test来测试发送消息,那想要测试发送消息,我们先enter test来标一个注解,然后我们想要发消息,我们肯定得需要一个能发消息功能的组件,咱们rabbit MQ的自动配置类里边有一个叫rabbit auto configuration,它呢给我们自动配了rabbit template这个呢就可以来收发消息,所以我们想要收发消息,我们就可以用它,我们把它拿过来,好,先来导入,我们将rabbit temp这个组件来自动注入,这个都是spring boot帮我们自动配置好的。然后我们想要测试发送消息,我们就来做一个测试发送消息,好,那么这个temp它里边呢,就有一些方法,比如有一个叫convert and send,就是转换并且发送。如果我们。
01:00
发送的是一个对象,它还会把这个消息转换成我们相关的字节流数据,然后再发给我们re MQ,当然它也有原生的这个send的方法,也可以去来发消息,发的这个消息呢,就要传一个message这个类型,那么就可以发任意类型的消息,我们就直接用它的convert and send的方法,那使用第一个发消息呢,首先指定我们要发给哪个交换机,这有一个exchange,我们刚才呢,上节课创建了一个交换机,这个交换机呢叫hello Java exchange,好,我们给这个交换机来发消息,然后接下来再来指定我们发消息,要发的消息是什么,以及我们的路由件是什么,因为我们这个交换机呢,正好跟我们的hellova QS这个做了一个绑定,它的路由件叫hello Java,所以我们消息呢,想要能投递给我们这个队列,那么必须发消息的时候,路由件也叫哈点Java我们就拿过来,好,路由件呢,我们就叫hello。
02:00
点着了,那我们想要发送的消息是什么?我们可以随便来写一个消息,那我们就叫hello word,好,我们把这个消息准备好,我们来让他发送出去,那我们只要消息发送出去,我来日志打印一下,点info log info,我们就将消息发送完成。那什么消息呢?我们把这个消息内容也给大家打印一下,这是我们的消息内容,我们可以发任意类型的消息,我们现在呢,发了一个string,这是我们的消息,消息的内容是我们hello word,好,我们把这个内容来复制过来,CTRLX。那我们现在呢,就是要发到这个消息,只要发送成功了,我来让他打印一下来测试,好,那在这来测试,走,我们先来看我们的这个队列里边,现在呢,还没有任何一个消息,Hello Java q,然后我们只要消息发送成功,好,我们看到只要消息发送成功,我们这一块呢,打印hello word,然后我们来看我们的队列里边,Hello Java q这里边儿呢,就有一个消息,我们拿出来看一下。
03:04
获取消息的时候呢,我来一定选择第二项,我把这个消息拿来,并且呢,不给它,让它重新放到队列里边,取一次呢,就直接删除,来点一个get message来看一下我们的这个消息,确实呢是hello word,我们这个消息没问题,所以这是我们的发送消息,我们只需要用rabbit temp就行了,包括如果我们要发一个对象,比如我们在这里边来拗一个对象,我们在这个项目里边呢,我们可以来拗一个我们要用的对象,来看哪个对象能简单一点,短一点来创建上一个对象,比如我们这个对象呢,就叫order return的这个entity,我们来用一个叫order return,我们退货原因的这个实体类,好来创建一个它,我们想呢,把它发到消息队列里边来,我们给它指定一些属性,点上一个set,我们给一个ID,我们就叫EL,然后呢,Reason entity,点一个set创建时间,你有一个date date好把这个创建时间包括呢,我们这。
04:05
这个edit点一个set,我们还有一个name,比如我们就叫哈哈,好,我们现在呢,准备了一个对象,我们想要发出去,那我们把这个对象给它放到这,我们直接呢发送成功的消息,那就是这个对象来给它打印上to string,方法好at一个to string,那接下来我们来做一个测试,看对象能不能发出去,走任意雷的型的对象,我们想发呢,都可以发出去,我们之前把那个消息已经拿了,那所有我们这一块没有消息了,再等我们这一块消息发送成功,那我们这一块呢就有消息了,好,我们就来等待这个消息,我们现在看到我们这个队列里边呢,现在就有一个消息,好,我们来点进来。我们这个队列里边来看一下这个消息,我们选择第二项来获取一下消息,好消息的内容呢,就是这一串,这一串内容呢是被编码了的,它我们能看到我们这个消息的属性里边,我们内容呢是application,我们使用Java序列化来进行了一个编码,得到了我们的消息内容,所以如果我们想要看到真正的这个对象,我们拿出来还得反序列化,而且大家一定注意,我们要能将消息发出去,那我们默认就必须对它来实现一个序列化接口,因为呢,我们发出去的消息是使用序列化机制的,所以我们在这一块来提示一下,如果发送的消息是个对象,如果发送的消息是个对象。
05:29
我们会使用序列化机制,会使用咱们这个序列化机制,将咱们这个对象写出去,将咱们这个对象呢写出去。所以呢,我们要求我们的对象必须实现我们的Siri laible这个接口,好,我们把这个接口呢打印过来,这是我们这个,如果说我们发消息想让它呢,序列化不是用这种方式,而是以一个杰森的方式,能不能做呢也可以,所以呢,我们现在可以来做一个变化,我们想让发出去的消息发送的这个对象消息发送的,那么这个对象类型的消息可以是一个,可以是一个杰森,想要变成杰森怎么办?我们就得分析我们的这个代码,我们来分析一下这个自动配置我们rabbit auto compgu controll n来打开它给我们来注入这个rabbit temp的时候,啊,在注入这个时候,大家注意它在这呢,获取了一个叫message converter,我们翻译过来就叫消息转换器,它放进去了,而这个消息转换器呢,是在这相当于我们这个rabbit t configuration。
06:41
在我们这个类在构造的时候,我们会拿到所有的消息转换器,比如它的对象的这一块,如果写了一个object provider,意思就是这个类型的数据从我们容器中来进行获取,如果容器中有,就用容器中的,如果容器中没有,我们看到如果容器,容器中有它给它赋值,然后呢,最终再把这个消息转换器拿过来,给我们的remit termulate放进去,而在re termate里边,我们的这个消息转换器,如果你给它放进去,就用你的,如果没有,它就是用的这个simple message converter点进来。这个message convert呢,它就是使用我们这个序列化机,我们可以来看一下它如何进行消息转换的,这有from message将一个消息转换过来,还有呢,我们这个create message,创建message,它将消息要转化过去,我们可以看到,如果我们这个消息实现了序列化接口,如果是string,那直接做。
07:41
如果实现了序列化结构,它就用序列化工具将我们这个转成一个BY数组,所以我们可以看到是message converter,就是我们这个东西,它是在起作用的,那我们想要呢,给它变换我们的这个消息转换策略,我们就来看有多少个message converter,这个message converter呢,它还是一个接口,CTRLH打开,我们想要用Jason,那么就来找一下我们的message convert里边,比如我们来看amstract,我们这个抽象的,它呢,我们之前的那个叫这个什么white list,白名单的这个,然后呢,我们接下来有一个叫Jackson to,也就是说我们现在呢可以来转杰森,我们有一个叫扎克son to,杰森message converter,所以我们想要给转成杰森们只需要给容器中放一个这个message converter就行了。好,我们把这个呢,提前也都配置好,我在这来专门写一个配置类conflict,点一个我们就叫my rabbit con那。
08:41
我们的这个。com里边,我们现在来做的第一件事就是我们给容器中放一个我们的消息转换器,好,我们public,那这个消息类型转换器,它的包名是我们的amqp support convert这个旗下的,好,我们把它导入进来,Amqp support convert,好,注意是这个我们来点进来,我们来给容器中自己来放一个message convert water,容器中有它就会用容器中的我们来给它制定我们的整个规则,这个规则呢,我们就来叫new,一个Jackson to,好,我们来创建一个new,一个我们叫Jackson to杰son message convert相当于使用Jackson这个工具包,把它转成一个杰森,然后我们接下来再来看我们发的消息是什么,那我们之前的这个消息呢,是序列化的,这种效果我们获取来了,我们再来获取队列里边已经没消息了,好,那现在来看,那同样的来发送这个消息,能不能给我们转成杰森类型的数据走。
09:39
来测试一下,只要消息发送成功,我们的这个队列里边呢,就会有消息,我们一会儿获取一下我们的整个消息内容,看一下是什么效果,好,我们来等待我们这一块后台来启动完成,来监控一下我们的这个web界面,只要有消息进来,这一块呢就会有显示,好,我们现在看到我们这个队列里边进来了一个新的消息,然后我们来点进来,来看一下我们的这个消息,我们把消息直接拿出来就行了,来点一个get,诶,我们发现呢,现在这个消息它就是一个杰森,而且呢,我们在这个消息的属性里边,我们用的路由件是这个消息发给这个队列,在属性里边,注意我们这还有一个叫content type内容类型,这个内容类型呢就叫applicationlig杰森,而且呢,在我们这个head,我们的消息这个图里边,它还有一个叫type ID,我们这个Jason的属性ID,这个ID呢叫order return entity,相当于我们如果要转过来,他也知道将我们这个杰森要。
10:39
转成哪个实体类对象好,所以呢,这是我们发消息,我们可以使用Jason方式,这是我们来测试发消息,我们以后发消息就可以使用rabbit temp,点一个convert and send来进行发送就行了,一定要指定将消息发给哪个交换机,用哪个路由件,然后呢,接下来交换机不同,路由件不同,它就会到达不同的队列,而一个队列呢,可以有很多人去来从它里边取消息,那最终呢,只会有一个人拿到真正的消息内容。
我来说两句