开始

image.png

如果我们当前用的队里不够了。需要创建更多的exchange、队列、bingding等

但是要求你原来的这个RabbitConfig不能动
image.png
把这些对象交给Spring去管理,
image.png

image.png

代码操作

我们把这些需要声明的代码都剪切出来
image.png

image.png
把exchange、queue、binding全部交给SpringBoot把它变成Bean
image.png

image.png
queue的Bean
image.png

image.png

image.png

image.png
image.png
image.png

image.png
谁会来调用这个方法呢?Spring boot框架来调用。它来调用的时候,把你的返回值给收走。 放在它自己的容器里面。它自己来管理这些交换机和队列。
image.png
它的容器里面只是放了我们需要声明的这些东西。没有被声明出来。把connectionFactory返回给容器。
image.png

把RabbitAdmin写成一个方法、参数ConnectionFactory取的就是上面的交给Spring容器管理的ConnectionFactory,它会自动的在容器里面,或者是它管理的这些Bean里面去找 有没有这个类型的东西。有它就会自动的把它塞过来。
image.png
我们没在参数上写ConnectionFactory之前。左侧这里没有任何的符号。
image.png
当我们加上了参数。
image.png
这java的咖啡豆的符号。
image.png
点击自动跳转到上面的Bean。表示Bean从哪里来的。
image.png
向左的箭头就是交给Spring容器,向右的箭头它会从Spring容器里面找回来这个Bean。
image.png
前面加不加这个注解都可以。。加上注解就可以告诉别人你这个参数是从哪里来的。加了注解后,代码的可读性就变强了。增加代码的可读性和规范。
image.png

下面的代码,上一小节用到的就可以删掉了
image.png

测试

image.png
image.png
这是我们上一章用到的监听,它会监听队列。抛出异常的原因是这个方法也是被自动运行的。它运行的时候可能队列还没有被声明。
image.png
把监听这里加一个延迟,保证队列创建后 再运行这个监听。
它的监听是这里操作的,可以直接在方法里面做线程休眠。
image.png

或者是这里休眠
image.png
切换到管控台看,先把之前创建的队列和路由都删掉。
image.png

运行项目测试。

image.png
exchange和queue都没有新的出来
image.png

rabbitAdmin有个属性一定要加上

必须设置AutoStartup这个属性,不设置这个属性的话,前面这些队列和exchange、绑定都不会自动创建。
image.png

重新运行服务测试

image.png
管控台上的队列也确实没有建起来
image.png
我们把这些bean和rabbitAdmin全部交给SpringBoot去管理,它是不会立即帮我们创建这些队列的。那么什么时候创建呢?当这个链接被使用的时候。这就是这个ConnectionFactory被使用的时候才会被创建。
image.png
在Spring boot看来,你创建connectionFactory或者rabbitMQ或者创建这些队列,都是因为你要收发消息。你都不用我这个connectionFactory去收发消息,
还在用下面这种古老的底层的channel去收发消息。用这种方式去收发消息,spring是不管你的。你绕开了我,用这个java底层的方式去收发消息,我不管你。
image.png
你什么时候用我这种Spring amqp里面特殊的功能去收发消息,我才会先去帮你创建各种队列。有点懒加载的意思。
只有你用这个ConnectionFacroty我才会去创建。

我们后面才会去改造,用Spring boot的方式去处理消息。目前这里还是老的channel的方式。
image.png

下一节。。。。

结束