apache / apache/rocketmq-spring

RocketMQMessageListenerBeanPostProcessor implements SmartLifecycle start()

Open
#672 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.3k
Forks
943
PR merge metrics
No merged PRs in 30d

Description

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
Class targetClass = AopUtils.getTargetClass(bean);
RocketMQMessageListener ann = targetClass.getAnnotation(RocketMQMessageListener.class);
if (ann != null) {
RocketMQMessageListener enhance = enhance(targetClass, ann);
if (listenerContainerRegistrar != null) {
log.warn("=== 111 ====");
listenerContainerRegistrar.registerContainer(beanName, bean, enhance);
}
}
return bean;
}

@Override
public int getPhase() {
return Integer.MAX_VALUE - 2000;
}

@Override
public void start() {
if (!isRunning()) {
this.setRunning(true);
log.warn("=== 222 ====");
listenerContainerRegistrar.startContainer();
}
}

1、单独使用spring-boot 2.7.18 registerContainer start 顺序正确可正常使用。
执行顺序
=== 111 ==== 先执行
=== 222 ==== 后执行
registerContainer 注册正常。
start 正常。
2、主要依赖如下
spring-cloud 2021.0.6
spring-cloud-starter-alibaba 2021.0.6.1
spring-boot 2.7.18
执行顺序
=== 222 ==== 先执行
=== 111 ==== 后执行
registerContainer 注册正常。
start 未能正常执行。

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with RocketMQMessageListenerBeanPostProcessor, especially postProcessAfterInitialization() and start(), and reproduce the logged ordering with Spring Boot 2.7.18 alone and with the listed Spring Cloud Alibaba dependencies. Trace the lifecycle callbacks and registrar calls; done means listener containers are registered before startContainer() runs in both setups.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring, spring-boot
Domain
backend, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.