开始

那么我们就用一下ConnectionFactory。我们调用这个方法就是为了用下它
image.png
链接了MQ并返回了Connection对象。
image.png
用过就会把队列都创建好。甚至可以在下面这里declare一个无关紧要的change
image.png
启动测试。我们使用createConnection的方式
image.png
看管控台,都创建出来了 这些路由
image.png

image.png

绑定关系
image.png

源码

进入到RabbitAdmin的类里面
image.png
主要看实现的这两个接口
image.png
这个接口内只有这个方法。如果实现了这个方法,你把它作为Spring Bean的时候,它会将Spring的上下文整个塞给你。
image.png
rabbitAdmin确实实现了这个方法
image.png
Spring把applicationContext塞给了他
image.png
我们进入ApplicationContext里面看一下。这里有Spring Boot的整个容器。所有Bean的名称都有。
image.png
这样我们就可以通过这个ApplicationContext拿到spring容器里面的所有exchange、queue、biding
image.png

还实现了InitializingBean

image.png
这个接口有一个afterPropertiesSet方法。当这个Bean被自动声明,这个Bean被处理好放进Spring容器的时候,会自动的调用这个afterPropertiesSet方法,也就是说当我们的Bean被做好后,它会自动的去执行这个afterPropertiesSet方法
image.png
这个方法会导致我们的Bean放进Spring boot 容器之后,并且被处理好之后,会自动调用这个方法。
image.png
先加了一个锁
image.png
把这个Bean变成initializing的状态,初始化的状态。
image.png
这个方法里面有一个initialize方法
image.png
这个方法不是直接调用的,这个方法在这。会把选中的这整个方法,整个的莱姆达表达式或者叫做匿名函数,set到ConnectionFactory里面。
image.png
而且他塞的是ConnectionListener
image.png
ctrl+alt+鼠标左键。
image.png
image.png
再进去ConnectionListener
image.png
FunctionalInterface里面只有一个方法。
image.png
FunctionalInterface里面只有一个方法。就是我们写的这个方法。
image.png
把这一坨莱姆达表达式set到了
image.png
把这一坨莱姆达表达式set到了这个里面。connectionListener里面。就是当做这个Connection要链接的时候,他要调用回调方法。当connection一旦有链接就调用方法。
image.png
这个方法就是做了一堆操作,做了initialize方法
image.png
我们进入到initialized方法内。
image.png
它在applicationContext里面
image.png
找所有的是Exchange的、Queue的、Binding的Bean
image.png

知道这些Bean后做了declare。底层的底层还是用了channel去做这些操作。
image.png
它是把这个方法注册到了ConnectionFactory里面,ConnectionFactory一旦有任何的链接生成,它会回调这个方法。
image.png
这也就解释了 为什么我们在RabbitConfig这个类里面,把这些Bean交给Spring 容器管理后它能自动的创建。还解释了为什么ConnectionFactory没有任何的操作的时候,它不自动创建。因为没有操作它不会回调注册的方法。它有任何操作只要建立了链接就会调用回调。
image.png
我们加了这一行createConnetion这行无意义的代码。为了刺激它一下,让它做链接的操作。它一会链接的操作就会调用initialize方法。我们后面整套接入MQP之后,就不需要这样刺激它了
image.png

结束