RocketMQTemplate切面失效
时间: 2019-09-29来源:开源中国
前景提要
HDC调试需求开发(15万预算),能者速来!>>>
1.场景
实现调用链路传递,使用aop拦截rocketmqtemplate的sendMessageInTransaction并注入traceId
2.环境 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.7.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR2</version> <type>pom</type> <scope>import</scope> </dependency>
3.代码 @EnableWebAppAutoConfig @SpringBootApplication @EnableCircuitBreaker @EnableAspectJAutoProxy(proxyTargetClass = true) @EnableFeignClients(basePackages = "com.taco.springcloud") @MapperScan(basePackages = "com.taco.springcloud.**.dao") public class TacoOrderApplication { public static void main(String[] args) { SpringApplication.run(TacoOrderApplication.class, args); } } @Slf4j @Aspect @Component public class RocketMQTraceAspect { @Pointcut("execution(* org.apache.rocketmq.spring.core.RocketMQTemplate.sendMessageInTransaction(..))") public void sendInTransaction() { } @Pointcut("execution(public * org.apache.rocketmq.client.producer.DefaultMQProducer.send(" + "org.apache.rocketmq.common.message.Message,..))") public void sendMessage() { } @Before(value = "sendInTransaction() || sendMessage()") public void onSendMessage(JoinPoint joinPoint) { //TODO: 拦截sendInTransaction有问题,待解决,目前通过定义RocketMQTemplate子类,修改子类方法实现 Object[] args = joinPoint.getArgs(); if(ArrayUtils.isEmpty(args)) { return; } for (Object arg : args) { if(arg instanceof Message) { setTraceId2MQ((Message) arg); } if(arg instanceof Collection) { Collection collection = (Collection) arg; for (Object o : collection) { if(o instanceof Message) { setTraceId2MQ((Message) o); continue; } break; } } } } private void setTraceId2MQ(Message msg) { msg.putUserProperty(CommonConstants.TRACE_ROUTE_HEADER, MDC.get(CommonConstants.LOG_TRACE_ROUTE_NAME)); }

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行