Commit c25256f1 authored by 王亮's avatar 王亮

add @DependsOn.

parent bd03ac98
......@@ -2,6 +2,8 @@ package cn.quantgroup.boot.micrometer.register.kafka;
import static java.util.stream.Collectors.joining;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpoint;
import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.FunctionTimer;
......@@ -14,7 +16,6 @@ import io.micrometer.core.instrument.util.DoubleFormat;
import io.micrometer.core.instrument.util.MeterPartition;
import io.micrometer.core.instrument.util.NamedThreadFactory;
import io.micrometer.core.instrument.util.StringUtils;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
......@@ -24,6 +25,7 @@ import java.util.stream.Stream;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.springframework.context.ApplicationContext;
import org.springframework.util.ObjectUtils;
public class KafkaMeterRegistry extends StepMeterRegistry {
......@@ -34,8 +36,9 @@ public class KafkaMeterRegistry extends StepMeterRegistry {
private KafkaProducer<String, String> kafkaProducer;
private final String key;
private ApplicationContext applicationContext;
public KafkaMeterRegistry(KafkaConfig config, Clock clock) {
public KafkaMeterRegistry(KafkaConfig config, Clock clock, ApplicationContext applicationContext) {
super(config, clock);
this.config = config;
if (ObjectUtils.isEmpty(System.getProperty("NAMESPACE"))) {
......@@ -43,6 +46,7 @@ public class KafkaMeterRegistry extends StepMeterRegistry {
} else {
key = System.getProperty("NAMESPACE");
}
this.applicationContext = applicationContext;
Properties properties = new Properties();
properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, config.services());
......@@ -97,8 +101,11 @@ public class KafkaMeterRegistry extends StepMeterRegistry {
.filter(t -> StringUtils.isNotBlank(t.getValue()))
.map(t -> "," + escapeField(t.getKey()) + "=" + escapeField(t.getValue()))
.collect(joining(""));
NacosDiscoveryEndpoint nacosDiscoveryEndpoint = (NacosDiscoveryEndpoint) this.applicationContext.getBean("nacosDiscoveryEndpoint");
String ip = ((NacosDiscoveryProperties) nacosDiscoveryEndpoint.nacosDiscovery()
.get("NacosDiscoveryProperties")).getIp();
tags = tags + (",ip=" + ip);
Instant.now().getNano();
return getConventionName(id)
+ tags + ",metric_type=" + metricType + " "
+ fields.map(Field::toString).collect(joining(","))
......
package cn.quantgroup.boot.micrometer.register.kafka;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery;
import com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpoint;
import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Tag;
import java.util.Arrays;
import javax.annotation.Resource;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.util.ObjectUtils;
@Configuration
......@@ -21,17 +21,16 @@ import org.springframework.util.ObjectUtils;
@EnableConfigurationProperties(EnochAgentProperties.class)
@ConditionalOnProperty(prefix = "tech.metric", name = "enabled", havingValue = "true")
@DependsOn({"nacosServiceDiscovery"})
public class MicroMeterKafkaAutoConfiguration {
public class MicroMeterKafkaAutoConfiguration implements ApplicationContextAware {
private final EnochAgentProperties enochAgentProperties;
@Value("${spring.application.name}")
private String applicationName;
@Resource
private NacosDiscoveryEndpoint nacosDiscoveryEndpoint;
private String applicationName;
private ApplicationContext applicationContext;
public MicroMeterKafkaAutoConfiguration(
EnochAgentProperties enochAgentProperties) {
this.enochAgentProperties = enochAgentProperties;
this.enochAgentProperties = enochAgentProperties;
}
@Bean
......@@ -42,23 +41,26 @@ public class MicroMeterKafkaAutoConfiguration {
public String get(String s) {
return null;
}
@Override
public String services(){
public String services() {
return enochAgentProperties.getKafkaHost();
}
@Override
public String topic(){
public String topic() {
return enochAgentProperties.getKafkaTopic();
}
@Override
public String applicationName(){
public String applicationName() {
return applicationName;
}
};
}
@Bean
@Primary
public KafkaMeterRegistry kafkaMeterRegistry(KafkaConfig kafkaConfig) {
//运行环境env,由于现有项目错误使用NAMESPACE,所以为了维持兼容采用这个参数
String env;
......@@ -67,12 +69,15 @@ public class MicroMeterKafkaAutoConfiguration {
} else {
env = System.getProperty("NAMESPACE");
}
//通过nacos注册服务获取服务地址
String appName = ((NacosDiscoveryProperties)nacosDiscoveryEndpoint.nacosDiscovery().get("NacosDiscoveryProperties")).getService();
String ip = ((NacosDiscoveryProperties)nacosDiscoveryEndpoint.nacosDiscovery().get("NacosDiscoveryProperties")).getIp();
KafkaMeterRegistry kafkaMeterRegistry = new KafkaMeterRegistry(kafkaConfig, Clock.SYSTEM);
kafkaMeterRegistry.config().commonTags( Arrays.asList(
Tag.of("env", env), Tag.of("application",appName),Tag.of("ip",ip)));
KafkaMeterRegistry kafkaMeterRegistry = new KafkaMeterRegistry(kafkaConfig, Clock.SYSTEM,
this.applicationContext);
kafkaMeterRegistry.config().commonTags(Arrays.asList(
Tag.of("env", env), Tag.of("application", applicationName)));
return kafkaMeterRegistry;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment