You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by "dousp (via GitHub)" <gi...@apache.org> on 2023/05/06 09:29:15 UTC
[GitHub] [rocketmq-spring] dousp commented on issue #558: 怎么注册钩子函数?
dousp commented on issue #558:
URL: https://github.com/apache/rocketmq-spring/issues/558#issuecomment-1537100647
```
@Component
public class RocketMQTemplateConfig implements BeanPostProcessor, ApplicationContextAware, SmartLifecycle {
private final Logger logger = LoggerFactory.getLogger(RocketMQTemplateConfig.class);
private boolean isRunning = false;
private ApplicationContext applicationContext;
@Resource
private RocketMQTemplate rocketMQTemplate;
@Resource(name = "braveTracer")
private Tracer tracer;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void start() {
isRunning = true;
registerSendHook();
registerConsumerHook();
}
@Override
public void stop() {
}
@Override
public boolean isRunning() {
return isRunning;
}
// 方式一
// @Override
// public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// if (bean instanceof RocketMQTemplate) {
// DefaultMQProducerImpl defaultMQProducer = ((RocketMQTemplate) bean).getProducer().getDefaultMQProducerImpl();
// defaultMQProducer.registerSendMessageHook(new SleuthTraceIdSendMessageHook(tracer));
// }
// return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
// }
public void registerSendHook() {
rocketMQTemplate.getProducer().getDefaultMQProducerImpl()
.registerSendMessageHook(new SendMessageSleuthTraceHook(tracer));
logger.info("producer-container: register hook [{}]", SendMessageSleuthTraceHook.class.getSimpleName());
}
private void registerConsumerHook() {
GenericApplicationContext genericApplicationContext = (GenericApplicationContext) this.applicationContext;
Map<String, DefaultRocketMQListenerContainer> containerMap =
genericApplicationContext.getBeansOfType(DefaultRocketMQListenerContainer.class);
containerMap.forEach(
(name, container) -> {
container.getConsumer().getDefaultMQPushConsumerImpl()
.registerConsumeMessageHook(new ConsumeMessageSleuthTraceHook(tracer));
logger.info("consumer-container: register hook [{}] to [{}]", ConsumeMessageSleuthTraceHook.class.getSimpleName(), name);
});
}
}
```
**`getDefaultMQPushConsumerImpl`标记过时了,但是没说替代方案**
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@rocketmq.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org