概述
为什么一个普通的方法加上@RabbitListener注解就能接收消息了呢?
总结来说如下:
- 有一个BeanPostProcessor(RabbitListenerAnnotationBeanPostProcessor)来处理这个注解,把某个注解相关的内容取出来,封装成一个RabbitListenerEndPoint(一个@RabbitListener注解对应一个RabbitListenerEndPoint)。
- 给每个EndPoint创建一个MessageListenerContainer,在这个MessageListenerContainer中注册一个MessageListener,在这个MessageListener中创建一个HandlerAdapter,这个adapter与rabbitmq broker建立一个connection,接收rabbitmq broker push过来的message,放到一个blocking queue中。自此,完成消息的接收。
- 接收完消息后就是处理消息。上文的adapter把我们用@RabbitListener注解的普通方法通过反射的方式还原出来,从blocking queue中poll 出一个一个的message,进行处理。