Commit c25256f1 authored by 王亮's avatar 王亮

add @DependsOn.

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