开始
这是上一节 实现的逻辑
为什么有人给我们发消息就会调用这个方法呢?我们并没有做任何的设置。
我们声明完了队列和绑定之后。自动的监听状态
设置callBack
用不到,先留一个空方法。
这样我们就注册了一个deliverCallback注册到了消费者上
当handleMessage方法被调用,我们会新建exchange和channel然后进入监听状态。
一旦受到消息,下面的回调函数就会被调用,进行业务的处理。
但是这里有个很大的问题是 ,谁来调用这个handleMessage方法呢?我们这里是不是要启一个异步的线程去调用这个方法呢?调用完了注册好消费者就可以了。这个异步线程不能退出。而且只能在异步线程里面做,不能在主线程里面做。因为最后注册玩消费者后,需要sleep
怎么用异步线程呢?用@Async这个注解,有了这个注解还不行。我们要设置线程池。
用异步线程,一定要设置线程池,如果不设置线程池,很可能引来线程爆炸。创建config包
先加上@Configuration注解,这样会把它当做配置类来处理
然后再用@EnableAsync。表示这个类和异步线程有关。
来写个线程池,注意是这个包下面的。
这个方法做什么呢?起一个线程池,然后返回。
设置核心线程数
线程池大小
缓冲队列长度
我们这个线程池关闭的时候是不是要等待所有线程都结束。
线程池要关闭的时候,我们要等待多长时间,等待所有线程都结束。
设置所有线程的名称
最终return回去。这样我们通过这个方法可以获取一个线程池。
线程池注册到spring boot应用里
实现接口
实现接口内的方法
实现这个方法,然后直接返回null。这个方法虽然用不到,但是还是要实现一下。
注册成Spring 的Bean
这样我们系统启动的时候就有了一个线程池,我们启异步线程的时候,它会自动往我们线程池里面取线程。不会有线程爆发的风险。
主类调用方法
还有一个问题谁去启动这个线程的方法呢?
新增加一个config类,然后去启用发送消息的的方法。
这样spring boot在启动的时候会找所有@Configuration的类,然后会调用里面@Autowaird的方法。然后我们处理消息的方法就被调用。
这个方法被调用后,因为它有async注解,它会启动一个异步线程去调用。
那么异步线程在哪里取呢?我们这里创建一个线程池,它会在线程池里面取空闲的线程。
这个方法在调用的时候会声明各种的exchange、queue和bind。随后进行监听。我们的应用就自动启动成功了
应用启动成功后,contorller就会监听所有的用户调用。如果有用户有关create的调用,controller就会调用service进行业务逻辑的实现。
第一阶段的订单的微服务就完成了,它对接了两个微服务,一个商户微服务一个是骑手微服务。