前言
刚开始用Spring-rocketmq时,好奇怎么只需要一个实现了RocketMQListener接口的自定义监听器就可以消费消息了:

这个自定义的消息监听器里,并没有如rocketmq原生Consumer那样对消息进行ack或者nack,那他到底是怎么控制的?为此专门看了下源码,全局搜了@RocketMQMessageListener注解,搜到一些东西,分享下:
源码
核心类:ListenerContainerConfiguration/DefaultRocketMQListenerContainer
首先ListenerContainerConfiguration实现了SmartInitializingSingleton接口,会在bean都实例化完之后,触发afterSingletonsInstantiated方法:

上面从Spring上下文中拿到了所有加了@RocketMQMessageListener的bean,咱们自定义的这个CommonMessageListener也就拿到了,接着执行registerContainer方法,其中的关键代码:

上面通过createRocketMQListenerContainer方法创建了一个DefaultRocketMQListene

本文深入解析了Spring RocketMQ如何通过实现RocketMQListener接口消费消息的内部机制。通过分析源码,发现Spring RocketMQ底层使用DefaultRocketMQListenerContainer封装原生Consumer,该容器在bean初始化后调用initRocketMQPushConsumer方法设置消息监听器。监听器根据业务逻辑决定是否ack消息。此外,文章还提供了官方源码链接及一系列消息中间件的演示demo供学习参考。

8067

被折叠的 条评论
为什么被折叠?



