apache / rocketmq-spring

Apache RocketMQ Spring Integration
https://rocketmq.apache.org/
Apache License 2.0
2.09k stars 894 forks source link

[ISSUE #632 ] Fix NPE caused by using @ ExtRocketMQTemplateConfiguration annotation extension to send messages in v5 #639

Closed lilinjiang closed 6 months ago

lilinjiang commented 6 months ago

What is the purpose of the change

fix and close [ISSUE #632 ]

fix v5 client [ISSUE #632 ]

Brief changelog

问题现象: 修复应用启动时,监听RocketMQ消息后使用@ExtRocketMQTemplateConfiguration注解扩展的RocketMQTemplate发送消息导致的空指针异常问题。 问题原因: Listener 启动时机比 @ExtRocketMQTemplateConfiguration注解扩展的RocketMQTemplate中producer 实例化的早,导致Listener监听到消息时 RocketMQTemplate中producerBuilder 还未实例化,使用RocketMQTemplate 发送消息将调用 getProducer() 方法获取 producer [ this.producer = producerBuilder.build() ],此时producerBuilder 等于null 将导致空指针异常。

(@RocketMQMessageListener 与 Spring Cloud Stream 的生产者一起使用时同样存在一样的问题,都是因为Listener的启动时机太早) 解决方案: 推迟了Listener 的启动时机 详情见commits。

lilinjiang commented 6 months ago

@panzhi33 修复了 v5 client