Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ public class MetricsConfig extends AbstractConfig {

private Integer exportServicePort;

/**
* Decide whether to use the global registry of the micrometer.
*/
private Boolean useGlobalRegistry;


public MetricsConfig() {
}
Expand Down Expand Up @@ -188,4 +193,12 @@ public Boolean getEnableThreadpool() {
public void setEnableThreadpool(Boolean enableThreadpool) {
this.enableThreadpool = enableThreadpool;
}

public Boolean getUseGlobalRegistry() {
return useGlobalRegistry;
}

public void setUseGlobalRegistry(Boolean useGlobalRegistry) {
this.useGlobalRegistry = useGlobalRegistry;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,40 @@

package org.apache.dubbo.metrics;

import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
import org.apache.dubbo.config.MetricsConfig;
import org.apache.dubbo.rpc.model.ApplicationModel;

import java.util.Optional;

/**
* Get the micrometer meter registry, can choose spring, micrometer, dubbo
*/
public class MetricsGlobalRegistry {

private static final CompositeMeterRegistry compositeRegistry = new CompositeMeterRegistry();
private static CompositeMeterRegistry compositeRegistry = new CompositeMeterRegistry();

/**
* Use CompositeMeterRegistry according to the following priority
* 1. If useGlobalRegistry is configured, use the micrometer global CompositeMeterRegistry
* 2. If there is a spring actuator, use spring's CompositeMeterRegistry
* 3. Dubbo's own CompositeMeterRegistry is used by default
*/
public static CompositeMeterRegistry getCompositeRegistry(ApplicationModel applicationModel) {
Optional<MetricsConfig> configOptional = applicationModel.getApplicationConfigManager().getMetrics();
if (configOptional.isPresent() && configOptional.get().getUseGlobalRegistry() != null && configOptional.get().getUseGlobalRegistry()) {
return Metrics.globalRegistry;
} else {
return compositeRegistry;
}
}

public static CompositeMeterRegistry getCompositeRegistry() {
return compositeRegistry;
return getCompositeRegistry(ApplicationModel.defaultModel());
}

public static void setCompositeRegistry(CompositeMeterRegistry compositeRegistry) {
MetricsGlobalRegistry.compositeRegistry = compositeRegistry;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public HistogramMetricsCollector(ApplicationModel applicationModel) {
histogram.setBucketsMs(DEFAULT_BUCKETS_MS);
}

metricRegister = new HistogramMetricRegister(MetricsGlobalRegistry.getCompositeRegistry(), histogram);
metricRegister = new HistogramMetricRegister(MetricsGlobalRegistry.getCompositeRegistry(applicationModel), histogram);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public abstract class AbstractMetricsReporter implements MetricsReporter {
protected AbstractMetricsReporter(URL url, ApplicationModel applicationModel) {
this.url = url;
this.applicationModel = applicationModel;
this.compositeRegistry = MetricsGlobalRegistry.getCompositeRegistry();
this.compositeRegistry = MetricsGlobalRegistry.getCompositeRegistry(applicationModel);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,27 @@
package org.apache.dubbo.spring.boot.actuate.autoconfigure;

import io.micrometer.core.instrument.MeterRegistry;
import org.apache.dubbo.metrics.DubboMetrics;
import org.apache.dubbo.spring.boot.actuate.mertics.DubboMetricsBinder;
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
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.ConditionalOnWebApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;



@Configuration(
proxyBeanMethods = false
)
@ConditionalOnWebApplication
@ConditionalOnClass({DubboMetrics.class})
@AutoConfigureAfter(CompositeMeterRegistryAutoConfiguration.class)
public class DubboMetricsAutoConfiguration {
@Bean
@ConditionalOnBean({MeterRegistry.class})
@ConditionalOnMissingBean({DubboMetrics.class, DubboMetricsBinder.class})
@ConditionalOnMissingBean({DubboMetricsBinder.class})
public DubboMetricsBinder dubboMetricsBinder(MeterRegistry meterRegistry) {

return new DubboMetricsBinder(meterRegistry);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,28 @@

package org.apache.dubbo.spring.boot.actuate.mertics;

import org.apache.dubbo.metrics.DubboMetrics;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
import org.apache.dubbo.metrics.MetricsGlobalRegistry;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;


public class DubboMetricsBinder implements ApplicationListener<ApplicationStartedEvent>, DisposableBean {
private final MeterRegistry meterRegistry;
private volatile DubboMetrics dubboMetrics;

public DubboMetricsBinder(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}


@Override
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
dubboMetrics = new DubboMetrics();
dubboMetrics.bindTo(meterRegistry);
if (meterRegistry instanceof CompositeMeterRegistry) {
MetricsGlobalRegistry.setCompositeRegistry((CompositeMeterRegistry) meterRegistry);
}
}

@Override
public void destroy() throws Exception {
dubboMetrics.destroy();
public void destroy() {

}
}