开始

这是上一节 实现的逻辑
image.png
为什么有人给我们发消息就会调用这个方法呢?我们并没有做任何的设置。
image.png
我们声明完了队列和绑定之后。自动的监听状态
image.png
设置callBack
image.png
用不到,先留一个空方法。
image.png
这样我们就注册了一个deliverCallback注册到了消费者上
image.png

当handleMessage方法被调用,我们会新建exchange和channel然后进入监听状态。
image.png
一旦受到消息,下面的回调函数就会被调用,进行业务的处理。
image.png
但是这里有个很大的问题是 ,谁来调用这个handleMessage方法呢?我们这里是不是要启一个异步的线程去调用这个方法呢?调用完了注册好消费者就可以了。这个异步线程不能退出。而且只能在异步线程里面做,不能在主线程里面做。因为最后注册玩消费者后,需要sleep
image.png

怎么用异步线程呢?用@Async这个注解,有了这个注解还不行。我们要设置线程池。
image.png
用异步线程,一定要设置线程池,如果不设置线程池,很可能引来线程爆炸。创建config包
image.png

image.png

先加上@Configuration注解,这样会把它当做配置类来处理
image.png
然后再用@EnableAsync。表示这个类和异步线程有关。
image.png
来写个线程池,注意是这个包下面的。
image.png
这个方法做什么呢?起一个线程池,然后返回。
设置核心线程数
image.png
线程池大小
image.png
缓冲队列长度
image.png
我们这个线程池关闭的时候是不是要等待所有线程都结束。
image.png
线程池要关闭的时候,我们要等待多长时间,等待所有线程都结束。
image.png
设置所有线程的名称
image.png
最终return回去。这样我们通过这个方法可以获取一个线程池。
image.png

线程池注册到spring boot应用里

实现接口
image.png
实现接口内的方法
image.png
实现这个方法,然后直接返回null。这个方法虽然用不到,但是还是要实现一下。
image.png
注册成Spring 的Bean
image.png
这样我们系统启动的时候就有了一个线程池,我们启异步线程的时候,它会自动往我们线程池里面取线程。不会有线程爆发的风险。

主类调用方法

还有一个问题谁去启动这个线程的方法呢?

新增加一个config类,然后去启用发送消息的的方法。
image.png
这样spring boot在启动的时候会找所有@Configuration的类,然后会调用里面@Autowaird的方法。然后我们处理消息的方法就被调用。
image.png
这个方法被调用后,因为它有async注解,它会启动一个异步线程去调用。
image.png
那么异步线程在哪里取呢?我们这里创建一个线程池,它会在线程池里面取空闲的线程。
image.png
这个方法在调用的时候会声明各种的exchange、queue和bind。随后进行监听。我们的应用就自动启动成功了
image.png
应用启动成功后,contorller就会监听所有的用户调用。如果有用户有关create的调用,controller就会调用service进行业务逻辑的实现。
image.png
image.png

image.png

第一阶段的订单的微服务就完成了,它对接了两个微服务,一个商户微服务一个是骑手微服务。

结束