From 6b68e3d4263ece4f5ea829af6031f26648ff649d Mon Sep 17 00:00:00 2001 From: linnan Date: Sun, 5 Sep 2021 22:34:13 +0800 Subject: [PATCH 1/4] Add tracer autoconfigure. (#847) --- .../sofa-boot-autoconfigure/pom.xml | 72 ++++++++++++ .../SofaTracerKafkaAutoConfiguration.java | 60 ++++++++++ .../SofaTracerMongoAutoConfiguration.java | 46 ++++++++ .../SofaTracerRabbitMqConfiguration.java | 58 ++++++++++ .../tracer/SofaTracerRedisConfiguration.java | 51 +++++++++ .../SofaTracerRocketMqConfiguration.java | 54 +++++++++ .../SpringMessageAutoConfiguration.java | 44 ++++++++ .../main/resources/META-INF/spring.factories | 6 + .../sofa-boot-core/tracer-sofa-boot/pom.xml | 66 +++++++++++ .../KafkaConsumerFactoryPostProcessor.java | 44 ++++++++ .../KafkaProducerFactoryPostProcessor.java | 44 ++++++++ ...StreamRocketMQTracerBeanPostProcessor.java | 57 ++++++++++ ...rMongoClientSettingsBuilderCustomizer.java | 46 ++++++++ .../SofaTracerRabbitMqBeanPostProcessor.java | 104 ++++++++++++++++++ ...faTracerRocketMqConsumerPostProcessor.java | 64 +++++++++++ ...faTracerRocketMqProducerPostProcessor.java | 64 +++++++++++ sofa-boot-project/sofa-boot-parent/pom.xml | 16 +++ .../sofaboot-dependencies/pom.xml | 36 ++++++ 18 files changed, 932 insertions(+) create mode 100644 sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java create mode 100644 sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java create mode 100644 sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java create mode 100644 sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java create mode 100644 sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java create mode 100644 sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/mongodb/SofaTracerMongoClientSettingsBuilderCustomizer.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessor.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessor.java diff --git a/sofa-boot-project/sofa-boot-autoconfigure/pom.xml b/sofa-boot-project/sofa-boot-autoconfigure/pom.xml index 23da6d5c6..c87b24f05 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/pom.xml +++ b/sofa-boot-project/sofa-boot-autoconfigure/pom.xml @@ -108,6 +108,42 @@ true + + com.alipay.sofa + sofa-tracer-kafkamq-plugin + true + + + + com.alipay.sofa + sofa-tracer-rabbitmq-plugin + true + + + + com.alipay.sofa + sofa-tracer-rocketmq-plugin + true + + + + com.alipay.sofa + sofa-tracer-springmessage-plugin + true + + + + com.alipay.sofa + sofa-tracer-redis-plugin + true + + + + com.alipay.sofa + sofa-tracer-mongodb-plugin + true + + org.springframework.cloud @@ -120,6 +156,42 @@ javax.servlet-api provided + + + org.springframework.kafka + spring-kafka + provided + + + + org.springframework.boot + spring-boot-starter-amqp + provided + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + provided + + + + org.springframework.cloud + spring-cloud-stream + provided + + + + org.springframework.boot + spring-boot-starter-data-redis + provided + + + + org.springframework.boot + spring-boot-starter-data-mongodb + provided + org.jmockit diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java new file mode 100644 index 000000000..e41c17dfb --- /dev/null +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.boot.autoconfigure.tracer; + +import com.alipay.sofa.tracer.boot.kafka.processor.KafkaConsumerFactoryPostProcessor; +import com.alipay.sofa.tracer.boot.kafka.processor.KafkaProducerFactoryPostProcessor; +import com.sofa.alipay.tracer.plugins.kafkamq.aspect.KafkaListenerSofaTracerAspect; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.kafka.core.ConsumerFactory; +import org.springframework.kafka.core.ProducerFactory; + +/** + * @author chenchen6 2020/9/2 21:56 + */ +@Configuration(proxyBeanMethods = false) +@AutoConfigureAfter(KafkaAutoConfiguration.class) +@ConditionalOnClass({ ProducerFactory.class, ConsumerFactory.class }) +@EnableAspectJAutoProxy(proxyTargetClass = true) +@ConditionalOnProperty(name = "com.alipay.tracer.kafka.enabled", havingValue = "true", matchIfMissing = true) +public class SofaTracerKafkaAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public KafkaConsumerFactoryPostProcessor kafkaConsumerFactoryPostProcessor() { + return new KafkaConsumerFactoryPostProcessor(); + } + + @Bean + @ConditionalOnMissingBean + public KafkaProducerFactoryPostProcessor kafkaProducerFactoryPostProcessor() { + return new KafkaProducerFactoryPostProcessor(); + } + + @Bean + @ConditionalOnMissingBean + public KafkaListenerSofaTracerAspect kafkaListenerSofaTracerAspect() { + return new KafkaListenerSofaTracerAspect(); + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java new file mode 100644 index 000000000..4a553c438 --- /dev/null +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.boot.autoconfigure.tracer; + +import com.alipay.sofa.tracer.boot.mongodb.SofaTracerMongoClientSettingsBuilderCustomizer; +import com.mongodb.client.MongoClient; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * SofaTracerMongoAutoConfiguration + * + * @author linnan + * @since 3.9.1 + **/ +@Configuration(proxyBeanMethods = false) +@AutoConfigureBefore({ MongoAutoConfiguration.class }) +@ConditionalOnClass({ MongoClient.class }) +@ConditionalOnProperty(name = "com.alipay.tracer.mongodb.enabled", havingValue = "true", matchIfMissing = true) +public class SofaTracerMongoAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + SofaTracerMongoClientSettingsBuilderCustomizer sofaTracerMongoClientSettingsBuilderCustomizer() { + return new SofaTracerMongoClientSettingsBuilderCustomizer(); + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java new file mode 100644 index 000000000..287c0608e --- /dev/null +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.boot.autoconfigure.tracer; + +import com.alipay.sofa.tracer.boot.rabbitmq.processor.SofaTracerRabbitMqBeanPostProcessor; +import com.sofa.alipay.tracer.plugins.rabbitmq.aspect.SofaTracerSendMessageAspect; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + +/** + * SofaTracerRabbitMqBeanPostProcessor. + * + * @author chenchen6 2020/8/09 20:44 + * @since 3.1.0 + */ +@Configuration(proxyBeanMethods = false) +@AutoConfigureAfter(RabbitAutoConfiguration.class) +@ConditionalOnClass({ Message.class, RabbitTemplate.class }) +@ConditionalOnProperty(prefix = "com.alipay.sofa.tracer.rabbitmq", value = "enable", matchIfMissing = true) +@EnableAspectJAutoProxy(proxyTargetClass = true) +public class SofaTracerRabbitMqConfiguration { + + @ConditionalOnBean(RabbitTemplate.class) + @Bean + public SofaTracerSendMessageAspect rabbitMqSendTracingAspect(RabbitTemplate rabbitTemplate) { + return new SofaTracerSendMessageAspect(rabbitTemplate.getExchange(), + rabbitTemplate.getRoutingKey(), rabbitTemplate.getMessageConverter(), rabbitTemplate); + } + + @ConditionalOnMissingBean + @Bean + public SofaTracerRabbitMqBeanPostProcessor sofaTracerRabbitMqBeanPostProcessor() { + return new SofaTracerRabbitMqBeanPostProcessor(); + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java new file mode 100644 index 000000000..0f75f0be5 --- /dev/null +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.boot.autoconfigure.tracer; + +import com.sofa.alipay.tracer.plugins.spring.redis.SofaTracerRCFBeanPostProcessor; +import com.sofa.alipay.tracer.plugins.spring.redis.common.RedisActionWrapperHelper; + +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; + +/** + * @author guolei.sgl (guolei.sgl@antfin.com) 2019/11/19 8:03 PM + * @since + **/ +@Configuration(proxyBeanMethods = false) +@ConditionalOnClass({ RedisConnectionFactory.class, RedisActionWrapperHelper.class }) +@ConditionalOnProperty(name = "com.alipay.sofa.tracer.redis.enabled", havingValue = "true", matchIfMissing = true) +@AutoConfigureAfter(SofaTracerAutoConfiguration.class) +public class SofaTracerRedisConfiguration { + + @Bean + @ConditionalOnMissingBean + RedisActionWrapperHelper redisActionWrapperHelper() { + return new RedisActionWrapperHelper(); + } + + @Bean + @ConditionalOnMissingBean + SofaTracerRCFBeanPostProcessor sofaTracerRCFBeanPostProcessor(RedisActionWrapperHelper redisActionWrapperHelper) { + return new SofaTracerRCFBeanPostProcessor(redisActionWrapperHelper); + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java new file mode 100644 index 000000000..a204c017f --- /dev/null +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.boot.autoconfigure.tracer; + +import com.alipay.sofa.tracer.boot.rocketmq.processor.SofaTracerRocketMqConsumerPostProcessor; +import com.alipay.sofa.tracer.boot.rocketmq.processor.SofaTracerRocketMqProducerPostProcessor; +import org.apache.rocketmq.client.producer.MQProducer; +import org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration; +import org.apache.rocketmq.spring.support.RocketMQListenerContainer; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * SofaTracerRabbitMqBeanPostProcessor. + * + * @author linnan + * @since 3.9.1 + */ +@Configuration(proxyBeanMethods = false) +@AutoConfigureBefore(RocketMQAutoConfiguration.class) +@ConditionalOnClass({ MQProducer.class, RocketMQListenerContainer.class }) +@ConditionalOnProperty(prefix = "com.alipay.sofa.tracer.rocketmq", value = "enable", matchIfMissing = true) +public class SofaTracerRocketMqConfiguration { + + @ConditionalOnMissingBean + @Bean + public SofaTracerRocketMqProducerPostProcessor sofaTracerRocketMqProducerPostProcessor() { + return new SofaTracerRocketMqProducerPostProcessor(); + } + + @ConditionalOnMissingBean + @Bean + public SofaTracerRocketMqConsumerPostProcessor sofaTracerRocketMqConsumerPostProcessor() { + return new SofaTracerRocketMqConsumerPostProcessor(); + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java new file mode 100644 index 000000000..b4c820c18 --- /dev/null +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.boot.autoconfigure.tracer; + +import com.alipay.sofa.tracer.boot.message.processor.StreamRocketMQTracerBeanPostProcessor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.stream.messaging.DirectWithAttributesChannel; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.integration.channel.AbstractMessageChannel; +import org.springframework.messaging.support.ChannelInterceptor; + +/** + * @author guolei.sgl (guolei.sgl@antfin.com) 2019/12/4 10:34 PM + * @since + **/ +@Configuration(proxyBeanMethods = false) +@ConditionalOnClass({ AbstractMessageChannel.class, ChannelInterceptor.class, + DirectWithAttributesChannel.class }) +@ConditionalOnProperty(prefix = "com.alipay.sofa.tracer.message", value = "enable", matchIfMissing = true) +public class SpringMessageAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public StreamRocketMQTracerBeanPostProcessor streamRocketMQTracerBeanPostProcessor() { + return new StreamRocketMQTracerBeanPostProcessor(); + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/sofa-boot-project/sofa-boot-autoconfigure/src/main/resources/META-INF/spring.factories index 40e0a03b2..f36f50285 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/resources/META-INF/spring.factories @@ -8,6 +8,12 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerFeignClientAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.tracer.ZipkinSofaTracerAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRestTemplateAutoConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerKafkaAutoConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRabbitMqConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRocketMqConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SpringMessageAutoConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRedisConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerMongoAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.tracer.TracerAnnotationAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.startup.SofaStartupAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.startup.SofaStartupIsleAutoConfiguration diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/pom.xml b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/pom.xml index 124aeced0..c6612d225 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/pom.xml +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/pom.xml @@ -70,12 +70,78 @@ provided + + com.alipay.sofa + sofa-tracer-kafkamq-plugin + true + + + + com.alipay.sofa + sofa-tracer-rabbitmq-plugin + true + + + + com.alipay.sofa + sofa-tracer-rocketmq-plugin + true + + + + com.alipay.sofa + sofa-tracer-springmessage-plugin + true + + + + com.alipay.sofa + sofa-tracer-redis-plugin + true + + + + com.alipay.sofa + sofa-tracer-mongodb-plugin + true + + org.springframework.cloud spring-cloud-starter-openfeign true + + org.springframework.kafka + spring-kafka + true + + + + org.springframework.boot + spring-boot-starter-amqp + true + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + true + + + + org.springframework.cloud + spring-cloud-stream + true + + + + org.springframework.boot + spring-boot-starter-data-mongodb + provided + + junit junit diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java new file mode 100644 index 000000000..aa54c97f3 --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.kafka.processor; + +import com.sofa.alipay.tracer.plugins.kafkamq.factories.SofaTracerKafkaConsumerFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.kafka.core.ConsumerFactory; + +/** + * KafkaConsumerFactoryPostProcessor. + * + * @author chenchen6 2020/9/3 22:18 + */ +public class KafkaConsumerFactoryPostProcessor implements BeanPostProcessor { + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + throws BeansException { + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) + throws BeansException { + if (bean instanceof ConsumerFactory && !(bean instanceof SofaTracerKafkaConsumerFactory)) { + return new SofaTracerKafkaConsumerFactory((ConsumerFactory) bean); + } + return bean; + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java new file mode 100644 index 000000000..318a498f7 --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.kafka.processor; + +import com.sofa.alipay.tracer.plugins.kafkamq.factories.SofaTracerKafkaProducerFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.kafka.core.ProducerFactory; + +/** + * KafkaProducerFactoryPostProcessor。 + * + * @author chenchen6 2020/9/3 22:15 + */ +public class KafkaProducerFactoryPostProcessor implements BeanPostProcessor { + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + throws BeansException { + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) + throws BeansException { + if (bean instanceof ProducerFactory && !(bean instanceof SofaTracerKafkaProducerFactory)) { + return new SofaTracerKafkaProducerFactory((ProducerFactory) bean); + } + return bean; + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java new file mode 100644 index 000000000..946b08733 --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.message.processor; + +import com.alipay.common.tracer.core.configuration.SofaTracerConfiguration; +import com.alipay.sofa.tracer.plugins.message.interceptor.SofaTracerChannelInterceptor; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.EnvironmentAware; +import org.springframework.core.PriorityOrdered; +import org.springframework.core.env.Environment; +import org.springframework.integration.channel.AbstractMessageChannel; + +/** + * @author guolei.sgl (guolei.sgl@antfin.com) 2019/12/4 11:07 AM + * @since + **/ +public class StreamRocketMQTracerBeanPostProcessor implements BeanPostProcessor, EnvironmentAware, + PriorityOrdered { + + private Environment environment; + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + throws BeansException { + if (bean instanceof AbstractMessageChannel) { + String appName = environment.getProperty(SofaTracerConfiguration.TRACER_APPNAME_KEY); + ((AbstractMessageChannel) bean).addInterceptor(SofaTracerChannelInterceptor + .create(appName)); + } + return bean; + } + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } + + @Override + public int getOrder() { + return LOWEST_PRECEDENCE; + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/mongodb/SofaTracerMongoClientSettingsBuilderCustomizer.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/mongodb/SofaTracerMongoClientSettingsBuilderCustomizer.java new file mode 100644 index 000000000..7bedb0fcf --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/mongodb/SofaTracerMongoClientSettingsBuilderCustomizer.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.mongodb; + +import com.alipay.common.tracer.core.configuration.SofaTracerConfiguration; +import com.alipay.sofa.tracer.plugins.mongodb.SofaTracerCommandListener; +import com.mongodb.MongoClientSettings.Builder; +import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer; +import org.springframework.context.EnvironmentAware; +import org.springframework.core.env.Environment; + +/** + * @author linnan + * @since 3.9.1 + */ +public class SofaTracerMongoClientSettingsBuilderCustomizer implements + MongoClientSettingsBuilderCustomizer, + EnvironmentAware { + private Environment environment; + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } + + @Override + public void customize(Builder clientSettingsBuilder) { + String appName = environment.getProperty(SofaTracerConfiguration.TRACER_APPNAME_KEY); + SofaTracerCommandListener commandListener = new SofaTracerCommandListener(appName); + clientSettingsBuilder.addCommandListener(commandListener); + } +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java new file mode 100644 index 000000000..5aa229a19 --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.rabbitmq.processor; + +import com.sofa.alipay.tracer.plugins.rabbitmq.interceptor.SofaTracerConsumeInterceptor; +import org.aopalliance.aop.Advice; +import org.springframework.amqp.rabbit.config.AbstractRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.config.DirectRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer; +import org.springframework.amqp.rabbit.listener.DirectMessageListenerContainer; +import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.core.PriorityOrdered; +import org.springframework.util.ReflectionUtils; + +import java.lang.reflect.Field; + +/** + * SofaTracerRabbitMqBeanPostProcessor. + * + * @author chenchen6 2020/8/09 20:44 + * @since 3.1.0 + */ +public class SofaTracerRabbitMqBeanPostProcessor implements BeanPostProcessor, PriorityOrdered { + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + throws BeansException { + if (bean instanceof SimpleRabbitListenerContainerFactory) { + SimpleRabbitListenerContainerFactory factory = (SimpleRabbitListenerContainerFactory) bean; + registerTracingInterceptor(factory); + } else if (bean instanceof SimpleMessageListenerContainer) { + SimpleMessageListenerContainer container = (SimpleMessageListenerContainer) bean; + registerTracingInterceptor(container); + } else if (bean instanceof DirectRabbitListenerContainerFactory) { + DirectRabbitListenerContainerFactory factory = (DirectRabbitListenerContainerFactory) bean; + registerTracingInterceptor(factory); + } else if (bean instanceof DirectMessageListenerContainer) { + DirectMessageListenerContainer container = (DirectMessageListenerContainer) bean; + registerTracingInterceptor(container); + } + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) + throws BeansException { + return bean; + } + + private void registerTracingInterceptor(AbstractRabbitListenerContainerFactory factory) { + Advice[] chain = factory.getAdviceChain(); + Advice[] adviceChainWithTracing = getAdviceChainOrAddInterceptorToChain(chain); + factory.setAdviceChain(adviceChainWithTracing); + } + + private void registerTracingInterceptor(AbstractMessageListenerContainer container) { + Field adviceChainField = ReflectionUtils.findField(AbstractMessageListenerContainer.class, + "adviceChain"); + ReflectionUtils.makeAccessible(adviceChainField); + Advice[] chain = (Advice[]) ReflectionUtils.getField(adviceChainField, container); + Advice[] adviceChainWithTracing = getAdviceChainOrAddInterceptorToChain(chain); + container.setAdviceChain(adviceChainWithTracing); + } + + private Advice[] getAdviceChainOrAddInterceptorToChain(Advice... existingAdviceChain) { + if (existingAdviceChain == null) { + return new Advice[] { new SofaTracerConsumeInterceptor() }; + } + + for (Advice advice : existingAdviceChain) { + if (advice instanceof SofaTracerConsumeInterceptor) { + return existingAdviceChain; + } + } + + Advice[] newChain = new Advice[existingAdviceChain.length + 1]; + System.arraycopy(existingAdviceChain, 0, newChain, 0, existingAdviceChain.length); + newChain[existingAdviceChain.length] = new SofaTracerConsumeInterceptor(); + + return newChain; + } + + @Override + public int getOrder() { + return LOWEST_PRECEDENCE; + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessor.java new file mode 100644 index 000000000..83bf2be2a --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessor.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.rocketmq.processor; + +import com.alipay.common.tracer.core.configuration.SofaTracerConfiguration; +import com.alipay.sofa.tracer.plugins.rocketmq.interceptor.SofaTracerConsumeMessageHook; +import org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.EnvironmentAware; +import org.springframework.core.PriorityOrdered; +import org.springframework.core.env.Environment; + +/** + * @author linnan + * @since 3.9.1 + */ +public class SofaTracerRocketMqConsumerPostProcessor implements BeanPostProcessor, + EnvironmentAware, PriorityOrdered { + private Environment environment; + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + throws BeansException { + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) + throws BeansException { + if (bean instanceof DefaultRocketMQListenerContainer) { + DefaultRocketMQListenerContainer container = (DefaultRocketMQListenerContainer) bean; + String appName = environment.getProperty(SofaTracerConfiguration.TRACER_APPNAME_KEY); + SofaTracerConsumeMessageHook hook = new SofaTracerConsumeMessageHook(appName); + container.getConsumer().getDefaultMQPushConsumerImpl().registerConsumeMessageHook(hook); + return container; + } + return bean; + } + + @Override + public int getOrder() { + return LOWEST_PRECEDENCE; + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessor.java new file mode 100644 index 000000000..0a80da572 --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessor.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.rocketmq.processor; + +import com.alipay.common.tracer.core.configuration.SofaTracerConfiguration; +import com.alipay.sofa.tracer.plugins.rocketmq.interceptor.SofaTracerSendMessageHook; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.EnvironmentAware; +import org.springframework.core.PriorityOrdered; +import org.springframework.core.env.Environment; + +/** + * @author linnan + * @since 3.9.1 + */ +public class SofaTracerRocketMqProducerPostProcessor implements BeanPostProcessor, + EnvironmentAware, PriorityOrdered { + private Environment environment; + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + throws BeansException { + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) + throws BeansException { + if (bean instanceof DefaultMQProducer) { + DefaultMQProducer producer = (DefaultMQProducer) bean; + String appName = environment.getProperty(SofaTracerConfiguration.TRACER_APPNAME_KEY); + SofaTracerSendMessageHook hook = new SofaTracerSendMessageHook(appName); + producer.getDefaultMQProducerImpl().registerSendMessageHook(hook); + return producer; + } + return bean; + } + + @Override + public int getOrder() { + return LOWEST_PRECEDENCE; + } +} \ No newline at end of file diff --git a/sofa-boot-project/sofa-boot-parent/pom.xml b/sofa-boot-project/sofa-boot-parent/pom.xml index 84f700452..c3360086d 100644 --- a/sofa-boot-project/sofa-boot-parent/pom.xml +++ b/sofa-boot-project/sofa-boot-parent/pom.xml @@ -31,6 +31,8 @@ 2.1.0.RELEASE + 2.1.0.RELEASE + 2.0.2 3.1.0 9.0.36 9.4.26.v20200117 @@ -71,6 +73,20 @@ provided + + org.springframework.cloud + spring-cloud-stream + ${spring.cloud.stream.version} + provided + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + ${rocketmq.spring.boot.starter.version} + provided + + javax.servlet javax.servlet-api diff --git a/sofa-boot-project/sofaboot-dependencies/pom.xml b/sofa-boot-project/sofaboot-dependencies/pom.xml index 565bf682c..59a9597e1 100644 --- a/sofa-boot-project/sofaboot-dependencies/pom.xml +++ b/sofa-boot-project/sofaboot-dependencies/pom.xml @@ -323,6 +323,42 @@ ${tracer.core.version} + + com.alipay.sofa + sofa-tracer-kafkamq-plugin + ${tracer.core.version} + + + + com.alipay.sofa + sofa-tracer-rabbitmq-plugin + ${tracer.core.version} + + + + com.alipay.sofa + sofa-tracer-rocketmq-plugin + ${tracer.core.version} + + + + com.alipay.sofa + sofa-tracer-springmessage-plugin + ${tracer.core.version} + + + + com.alipay.sofa + sofa-tracer-redis-plugin + ${tracer.core.version} + + + + com.alipay.sofa + sofa-tracer-mongodb-plugin + ${tracer.core.version} + + com.alipay.sofa registry-client-all From 88ff618abb4fe3f0b23baa8f5522adf7dcfcaced Mon Sep 17 00:00:00 2001 From: linnan Date: Sun, 5 Sep 2021 23:22:26 +0800 Subject: [PATCH 2/4] Code format. --- .../autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java | 2 +- .../autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java | 2 +- .../autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java | 2 +- .../boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java | 2 +- .../autoconfigure/tracer/SofaTracerRocketMqConfiguration.java | 2 +- .../autoconfigure/tracer/SpringMessageAutoConfiguration.java | 2 +- .../boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java | 2 +- .../boot/kafka/processor/KafkaProducerFactoryPostProcessor.java | 2 +- .../processor/StreamRocketMQTracerBeanPostProcessor.java | 2 +- .../rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java | 2 +- .../processor/SofaTracerRocketMqConsumerPostProcessor.java | 2 +- .../processor/SofaTracerRocketMqProducerPostProcessor.java | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java index e41c17dfb..f7c7e1d10 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java @@ -57,4 +57,4 @@ public KafkaProducerFactoryPostProcessor kafkaProducerFactoryPostProcessor() { public KafkaListenerSofaTracerAspect kafkaListenerSofaTracerAspect() { return new KafkaListenerSofaTracerAspect(); } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java index 4a553c438..1dec9fb52 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerMongoAutoConfiguration.java @@ -43,4 +43,4 @@ public class SofaTracerMongoAutoConfiguration { SofaTracerMongoClientSettingsBuilderCustomizer sofaTracerMongoClientSettingsBuilderCustomizer() { return new SofaTracerMongoClientSettingsBuilderCustomizer(); } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java index 287c0608e..2873dcecf 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java @@ -55,4 +55,4 @@ public SofaTracerSendMessageAspect rabbitMqSendTracingAspect(RabbitTemplate rabb public SofaTracerRabbitMqBeanPostProcessor sofaTracerRabbitMqBeanPostProcessor() { return new SofaTracerRabbitMqBeanPostProcessor(); } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java index 0f75f0be5..1cdf186cf 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java @@ -48,4 +48,4 @@ RedisActionWrapperHelper redisActionWrapperHelper() { SofaTracerRCFBeanPostProcessor sofaTracerRCFBeanPostProcessor(RedisActionWrapperHelper redisActionWrapperHelper) { return new SofaTracerRCFBeanPostProcessor(redisActionWrapperHelper); } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java index a204c017f..e43731178 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java @@ -51,4 +51,4 @@ public SofaTracerRocketMqProducerPostProcessor sofaTracerRocketMqProducerPostPro public SofaTracerRocketMqConsumerPostProcessor sofaTracerRocketMqConsumerPostProcessor() { return new SofaTracerRocketMqConsumerPostProcessor(); } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java index b4c820c18..5264fcf50 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java @@ -41,4 +41,4 @@ public class SpringMessageAutoConfiguration { public StreamRocketMQTracerBeanPostProcessor streamRocketMQTracerBeanPostProcessor() { return new StreamRocketMQTracerBeanPostProcessor(); } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java index aa54c97f3..88108ecb9 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java @@ -41,4 +41,4 @@ public Object postProcessAfterInitialization(Object bean, String beanName) } return bean; } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java index 318a498f7..302c8c584 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java @@ -41,4 +41,4 @@ public Object postProcessAfterInitialization(Object bean, String beanName) } return bean; } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java index 946b08733..996bd0785 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java @@ -54,4 +54,4 @@ public void setEnvironment(Environment environment) { public int getOrder() { return LOWEST_PRECEDENCE; } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java index 5aa229a19..e69db6322 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java @@ -101,4 +101,4 @@ private Advice[] getAdviceChainOrAddInterceptorToChain(Advice... existingAdviceC public int getOrder() { return LOWEST_PRECEDENCE; } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessor.java index 83bf2be2a..deac36745 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessor.java @@ -61,4 +61,4 @@ public Object postProcessAfterInitialization(Object bean, String beanName) public int getOrder() { return LOWEST_PRECEDENCE; } -} \ No newline at end of file +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessor.java index 0a80da572..d1990139f 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessor.java @@ -61,4 +61,4 @@ public Object postProcessAfterInitialization(Object bean, String beanName) public int getOrder() { return LOWEST_PRECEDENCE; } -} \ No newline at end of file +} From cdf1c42f4b794e4fa78589df6ed8a26620814a11 Mon Sep 17 00:00:00 2001 From: linnan Date: Mon, 27 Sep 2021 13:41:03 +0800 Subject: [PATCH 3/4] Update code style. --- .../tracer/SofaTracerKafkaAutoConfiguration.java | 1 + ...ration.java => SofaTracerRabbitMqAutoConfiguration.java} | 6 +++--- ...iguration.java => SofaTracerRedisAutoConfiguration.java} | 4 ++-- ...ration.java => SofaTracerRocketMqAutoConfiguration.java} | 4 ++-- .../tracer/SpringMessageAutoConfiguration.java | 2 +- .../src/main/resources/META-INF/spring.factories | 6 +++--- .../kafka/processor/KafkaConsumerFactoryPostProcessor.java | 1 + .../kafka/processor/KafkaProducerFactoryPostProcessor.java | 1 + .../processor/StreamRocketMQTracerBeanPostProcessor.java | 2 +- .../processor/SofaTracerRabbitMqBeanPostProcessor.java | 2 +- 10 files changed, 16 insertions(+), 13 deletions(-) rename sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/{SofaTracerRabbitMqConfiguration.java => SofaTracerRabbitMqAutoConfiguration.java} (96%) rename sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/{SofaTracerRedisConfiguration.java => SofaTracerRedisAutoConfiguration.java} (97%) rename sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/{SofaTracerRocketMqConfiguration.java => SofaTracerRocketMqAutoConfiguration.java} (96%) diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java index f7c7e1d10..45965e8de 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerKafkaAutoConfiguration.java @@ -32,6 +32,7 @@ /** * @author chenchen6 2020/9/2 21:56 + * @since 3.9.1 */ @Configuration(proxyBeanMethods = false) @AutoConfigureAfter(KafkaAutoConfiguration.class) diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqAutoConfiguration.java similarity index 96% rename from sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java rename to sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqAutoConfiguration.java index 2873dcecf..d62568bb0 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRabbitMqAutoConfiguration.java @@ -31,17 +31,17 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy; /** - * SofaTracerRabbitMqBeanPostProcessor. + * SofaTracerRabbitMqAutoConfiguration. * * @author chenchen6 2020/8/09 20:44 - * @since 3.1.0 + * @since 3.9.1 */ @Configuration(proxyBeanMethods = false) @AutoConfigureAfter(RabbitAutoConfiguration.class) @ConditionalOnClass({ Message.class, RabbitTemplate.class }) @ConditionalOnProperty(prefix = "com.alipay.sofa.tracer.rabbitmq", value = "enable", matchIfMissing = true) @EnableAspectJAutoProxy(proxyTargetClass = true) -public class SofaTracerRabbitMqConfiguration { +public class SofaTracerRabbitMqAutoConfiguration { @ConditionalOnBean(RabbitTemplate.class) @Bean diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisAutoConfiguration.java similarity index 97% rename from sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java rename to sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisAutoConfiguration.java index 1cdf186cf..ddd106211 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRedisAutoConfiguration.java @@ -29,13 +29,13 @@ /** * @author guolei.sgl (guolei.sgl@antfin.com) 2019/11/19 8:03 PM - * @since + * @since 3.9.1 **/ @Configuration(proxyBeanMethods = false) @ConditionalOnClass({ RedisConnectionFactory.class, RedisActionWrapperHelper.class }) @ConditionalOnProperty(name = "com.alipay.sofa.tracer.redis.enabled", havingValue = "true", matchIfMissing = true) @AutoConfigureAfter(SofaTracerAutoConfiguration.class) -public class SofaTracerRedisConfiguration { +public class SofaTracerRedisAutoConfiguration { @Bean @ConditionalOnMissingBean diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqAutoConfiguration.java similarity index 96% rename from sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java rename to sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqAutoConfiguration.java index e43731178..199a1d007 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerRocketMqAutoConfiguration.java @@ -29,7 +29,7 @@ import org.springframework.context.annotation.Configuration; /** - * SofaTracerRabbitMqBeanPostProcessor. + * SofaTracerRocketMqAutoConfiguration. * * @author linnan * @since 3.9.1 @@ -38,7 +38,7 @@ @AutoConfigureBefore(RocketMQAutoConfiguration.class) @ConditionalOnClass({ MQProducer.class, RocketMQListenerContainer.class }) @ConditionalOnProperty(prefix = "com.alipay.sofa.tracer.rocketmq", value = "enable", matchIfMissing = true) -public class SofaTracerRocketMqConfiguration { +public class SofaTracerRocketMqAutoConfiguration { @ConditionalOnMissingBean @Bean diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java index 5264fcf50..9a1ec83d8 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SpringMessageAutoConfiguration.java @@ -28,7 +28,7 @@ /** * @author guolei.sgl (guolei.sgl@antfin.com) 2019/12/4 10:34 PM - * @since + * @since 3.9.1 **/ @Configuration(proxyBeanMethods = false) @ConditionalOnClass({ AbstractMessageChannel.class, ChannelInterceptor.class, diff --git a/sofa-boot-project/sofa-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/sofa-boot-project/sofa-boot-autoconfigure/src/main/resources/META-INF/spring.factories index f36f50285..8f07a9d63 100644 --- a/sofa-boot-project/sofa-boot-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/sofa-boot-project/sofa-boot-autoconfigure/src/main/resources/META-INF/spring.factories @@ -9,10 +9,10 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.alipay.sofa.boot.autoconfigure.tracer.ZipkinSofaTracerAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRestTemplateAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerKafkaAutoConfiguration,\ - com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRabbitMqConfiguration,\ - com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRocketMqConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRabbitMqAutoConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRocketMqAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.tracer.SpringMessageAutoConfiguration,\ - com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRedisConfiguration,\ + com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerRedisAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.tracer.SofaTracerMongoAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.tracer.TracerAnnotationAutoConfiguration,\ com.alipay.sofa.boot.autoconfigure.startup.SofaStartupAutoConfiguration,\ diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java index 88108ecb9..a9efe4180 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaConsumerFactoryPostProcessor.java @@ -25,6 +25,7 @@ * KafkaConsumerFactoryPostProcessor. * * @author chenchen6 2020/9/3 22:18 + * @since 3.9.1 */ public class KafkaConsumerFactoryPostProcessor implements BeanPostProcessor { @Override diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java index 302c8c584..e690779c3 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/kafka/processor/KafkaProducerFactoryPostProcessor.java @@ -25,6 +25,7 @@ * KafkaProducerFactoryPostProcessor。 * * @author chenchen6 2020/9/3 22:15 + * @since 3.9.1 */ public class KafkaProducerFactoryPostProcessor implements BeanPostProcessor { @Override diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java index 996bd0785..bd7bfc1a3 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/message/processor/StreamRocketMQTracerBeanPostProcessor.java @@ -27,7 +27,7 @@ /** * @author guolei.sgl (guolei.sgl@antfin.com) 2019/12/4 11:07 AM - * @since + * @since 3.9.1 **/ public class StreamRocketMQTracerBeanPostProcessor implements BeanPostProcessor, EnvironmentAware, PriorityOrdered { diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java index e69db6322..2bfca1dfa 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/main/java/com/alipay/sofa/tracer/boot/rabbitmq/processor/SofaTracerRabbitMqBeanPostProcessor.java @@ -35,7 +35,7 @@ * SofaTracerRabbitMqBeanPostProcessor. * * @author chenchen6 2020/8/09 20:44 - * @since 3.1.0 + * @since 3.9.1 */ public class SofaTracerRabbitMqBeanPostProcessor implements BeanPostProcessor, PriorityOrdered { From d3d7f322fcd543c53098aedb5ff8698dcf6b300c Mon Sep 17 00:00:00 2001 From: linnan Date: Wed, 13 Oct 2021 16:01:17 +0800 Subject: [PATCH 4/4] Add unit test cases. --- .../sofa-boot-core/tracer-sofa-boot/pom.xml | 6 ++ ...goClientSettingsBuilderCustomizerTest.java | 65 ++++++++++++ ...acerRocketMqConsumerPostProcessorTest.java | 100 ++++++++++++++++++ ...acerRocketMqProducerPostProcessorTest.java | 76 +++++++++++++ 4 files changed, 247 insertions(+) create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/mongodb/SofaTracerMongoClientSettingsBuilderCustomizerTest.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessorTest.java create mode 100644 sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessorTest.java diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/pom.xml b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/pom.xml index c6612d225..dd20ff62c 100644 --- a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/pom.xml +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/pom.xml @@ -147,6 +147,12 @@ junit + + org.springframework.boot + spring-boot-starter-test + test + + diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/mongodb/SofaTracerMongoClientSettingsBuilderCustomizerTest.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/mongodb/SofaTracerMongoClientSettingsBuilderCustomizerTest.java new file mode 100644 index 000000000..6d581b6f8 --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/mongodb/SofaTracerMongoClientSettingsBuilderCustomizerTest.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.mongodb; + +import com.alipay.sofa.tracer.plugins.mongodb.SofaTracerCommandListener; +import com.mongodb.MongoClientSettings; +import com.mongodb.event.CommandListener; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; + +/** + * @author linnan + * @since 3.9.1 + */ +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(properties = "spring.application.name=SofaTracerMongoClientSettingsBuilderCustomizerTest") +public class SofaTracerMongoClientSettingsBuilderCustomizerTest { + + @Autowired + private SofaTracerMongoClientSettingsBuilderCustomizer sofaTracerMongoClientSettingsBuilderCustomizer; + + @Test + public void customize() { + MongoClientSettings.Builder builder = MongoClientSettings.builder(); + sofaTracerMongoClientSettingsBuilderCustomizer.customize(builder); + MongoClientSettings settings = builder.build(); + List commandListeners = settings.getCommandListeners(); + Assert.assertNotNull(commandListeners); + Assert.assertFalse(commandListeners.isEmpty()); + CommandListener commandListener = commandListeners.get(commandListeners.size() - 1); + Assert.assertTrue(commandListener instanceof SofaTracerCommandListener); + } + + @Configuration(proxyBeanMethods = false) + static class SofaTracerMongoClientSettingsBuilderCustomizerTestConfiguration { + @Bean + public SofaTracerMongoClientSettingsBuilderCustomizer sofaTracerMongoClientSettingsBuilderCustomizer() { + return new SofaTracerMongoClientSettingsBuilderCustomizer(); + } + } +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessorTest.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessorTest.java new file mode 100644 index 000000000..ad57b1996 --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqConsumerPostProcessorTest.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.rocketmq.processor; + +import com.alipay.sofa.tracer.plugins.rocketmq.interceptor.SofaTracerConsumeMessageHook; +import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; +import org.apache.rocketmq.client.hook.ConsumeMessageHook; +import org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.ReflectionUtils; + +import java.lang.reflect.Field; +import java.util.ArrayList; + +/** + * @author linnan + * @since 3.9.1 + */ +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(properties = "spring.application.name=SofaTracerRocketMqConsumerPostProcessorTest") +public class SofaTracerRocketMqConsumerPostProcessorTest { + + @Autowired + private DefaultRocketMQListenerContainer defaultRocketMQListenerContainer; + + @Test + public void postProcessAfterInitialization() { + DefaultMQPushConsumer consumer = defaultRocketMQListenerContainer.getConsumer(); + DefaultMQPushConsumerImpl defaultMQPushConsumerImpl = consumer.getDefaultMQPushConsumerImpl(); + Assert.assertTrue(defaultMQPushConsumerImpl.hasHook()); + Field field = ReflectionUtils.findField(DefaultMQPushConsumerImpl.class, + "consumeMessageHookList"); + Assert.assertNotNull(field); + field.setAccessible(true); + Object value = ReflectionUtils.getField(field, defaultMQPushConsumerImpl); + Assert.assertTrue(value instanceof ArrayList); + ArrayList consumeMessageHookList = (ArrayList) value; + ConsumeMessageHook consumeMessageHook = consumeMessageHookList.get( + consumeMessageHookList.size() - 1); + Assert.assertTrue(consumeMessageHook instanceof SofaTracerConsumeMessageHook); + } + + @Configuration(proxyBeanMethods = false) + static class SofaTracerRocketMqConsumerPostProcessorTestConfiguration { + @Bean + public SofaTracerRocketMqConsumerPostProcessor sofaTracerRocketMqConsumerPostProcessor() { + return new SofaTracerRocketMqConsumerPostProcessor(); + } + + @Bean + public DefaultRocketMQListenerContainer defaultRocketMQListenerContainer() { + MockListener mockListener = new MockListener(); + RocketMQMessageListener annotation = AnnotationUtils.findAnnotation(MockListener.class, + RocketMQMessageListener.class); + DefaultRocketMQListenerContainer container = new DefaultRocketMQListenerContainer(); + DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(); + container.setConsumer(consumer); + container.setConsumerGroup(annotation.consumerGroup()); + container.setNameServer("127.0.0.1:9876"); + container.setTopic(annotation.topic()); + container.setRocketMQMessageListener(annotation); + container.setRocketMQListener(mockListener); + return container; + } + } + + @RocketMQMessageListener(consumerGroup = "sofa-group", topic = "sofa-topic") + static class MockListener implements RocketMQListener { + @Override + public void onMessage(String message) { + } + } +} diff --git a/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessorTest.java b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessorTest.java new file mode 100644 index 000000000..7ecaba9b2 --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/tracer-sofa-boot/src/test/com/alipay/sofa/tracer/boot/rocketmq/processor/SofaTracerRocketMqProducerPostProcessorTest.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.tracer.boot.rocketmq.processor; + +import com.alipay.sofa.tracer.plugins.rocketmq.interceptor.SofaTracerSendMessageHook; +import org.apache.rocketmq.client.hook.SendMessageHook; +import org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.ReflectionUtils; + +import java.lang.reflect.Field; +import java.util.ArrayList; + +/** + * @author linnan + * @since 3.9.1 + */ +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(properties = "spring.application.name=SofaTracerRocketMqProducerPostProcessorTest") +public class SofaTracerRocketMqProducerPostProcessorTest { + + @Autowired + private DefaultMQProducer defaultMQProducer; + + @Test + public void postProcessAfterInitialization() { + DefaultMQProducerImpl producer = defaultMQProducer.getDefaultMQProducerImpl(); + Assert.assertTrue(producer.hasSendMessageHook()); + Field field = ReflectionUtils.findField(DefaultMQProducerImpl.class, + "sendMessageHookList"); + Assert.assertNotNull(field); + field.setAccessible(true); + Object value = ReflectionUtils.getField(field, producer); + Assert.assertTrue(value instanceof ArrayList); + ArrayList sendMessageHookList = (ArrayList) value; + SendMessageHook sendMessageHook = sendMessageHookList.get(sendMessageHookList.size() - 1); + Assert.assertTrue(sendMessageHook instanceof SofaTracerSendMessageHook); + } + + @Configuration(proxyBeanMethods = false) + static class SofaTracerRocketMqProducerPostProcessorTestConfiguration { + @Bean + public SofaTracerRocketMqProducerPostProcessor sofaTracerRocketMqProducerPostProcessor() { + return new SofaTracerRocketMqProducerPostProcessor(); + } + + @Bean + public DefaultMQProducer defaultMQProducer() { + return new DefaultMQProducer(); + } + } +}