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