This is an automated email from the ASF dual-hosted git repository.
songxiaosheng pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.2 by this push:
new 865e683848 Add metrics option for use global registry (#12238)
865e683848 is described below
commit 865e683848f9fba5220463cb7e396c8048e86e09
Author: wxbty <[email protected]>
AuthorDate: Tue May 16 19:56:02 2023 +0800
Add metrics option for use global registry (#12238)
* remove unuse code
* add jvm option for if use micrometer globalRegistry
* Optional use of CompositeMeterRegistry
* Optional use of CompositeMeterRegistry
* fix npe
* Compatible with old api
* add comment
---------
Co-authored-by: x-shadow-man <[email protected]>
Co-authored-by: songxiaosheng <[email protected]>
---
.../org/apache/dubbo/config/MetricsConfig.java | 13 +++++++
.../org/apache/dubbo/metrics/DubboMetrics.java | 40 ----------------------
.../dubbo/metrics/MetricsGlobalRegistry.java | 31 +++++++++++++++--
.../collector/HistogramMetricsCollector.java | 2 +-
.../metrics/report/AbstractMetricsReporter.java | 2 +-
.../DubboMetricsAutoConfiguration.java | 7 ++--
.../boot/actuate/mertics/DubboMetricsBinder.java | 16 ++++-----
7 files changed, 53 insertions(+), 58 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java
index f01abbb896..62e1882143 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java
@@ -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() {
}
@@ -188,4 +193,12 @@ public class MetricsConfig extends AbstractConfig {
public void setEnableThreadpool(Boolean enableThreadpool) {
this.enableThreadpool = enableThreadpool;
}
+
+ public Boolean getUseGlobalRegistry() {
+ return useGlobalRegistry;
+ }
+
+ public void setUseGlobalRegistry(Boolean useGlobalRegistry) {
+ this.useGlobalRegistry = useGlobalRegistry;
+ }
}
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
deleted file mode 100644
index ab38c121a5..0000000000
---
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/DubboMetrics.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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 org.apache.dubbo.metrics;
-
-import io.micrometer.core.instrument.MeterRegistry;
-import io.micrometer.core.instrument.binder.MeterBinder;
-import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
-
-
-public class DubboMetrics implements MeterBinder {
-
- private MeterRegistry globalRegistry = null;
-
- @Override
- public void bindTo(MeterRegistry registry) {
- globalRegistry = registry;
- CompositeMeterRegistry compositeRegistry =
MetricsGlobalRegistry.getCompositeRegistry();
- if (compositeRegistry != null) {
- compositeRegistry.add(registry);
- }
- }
-
- public void destroy() {
- }
-}
-
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/MetricsGlobalRegistry.java
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/MetricsGlobalRegistry.java
index cc6c824c18..6a69e4ed80 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/MetricsGlobalRegistry.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/MetricsGlobalRegistry.java
@@ -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;
}
}
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/HistogramMetricsCollector.java
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/HistogramMetricsCollector.java
index 9979707364..3a17033a97 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/HistogramMetricsCollector.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/HistogramMetricsCollector.java
@@ -61,7 +61,7 @@ public class HistogramMetricsCollector extends
AbstractMetricsListener<RequestEv
histogram.setBucketsMs(DEFAULT_BUCKETS_MS);
}
- metricRegister = new
HistogramMetricRegister(MetricsGlobalRegistry.getCompositeRegistry(),
histogram);
+ metricRegister = new
HistogramMetricRegister(MetricsGlobalRegistry.getCompositeRegistry(applicationModel),
histogram);
}
}
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsReporter.java
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsReporter.java
index 5f93e8cda2..3dfed9b466 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsReporter.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsReporter.java
@@ -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
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboMetricsAutoConfiguration.java
b/dubbo-spring-boot/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboMetricsAutoConfiguration.java
index e091f272ba..0543547cd6 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboMetricsAutoConfiguration.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/autoconfigure/DubboMetricsAutoConfiguration.java
@@ -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);
}
}
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/mertics/DubboMetricsBinder.java
b/dubbo-spring-boot/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/mertics/DubboMetricsBinder.java
index 5ea4644540..e670303fbd 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/mertics/DubboMetricsBinder.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-actuator/src/main/java/org/apache/dubbo/spring/boot/actuate/mertics/DubboMetricsBinder.java
@@ -17,8 +17,9 @@
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;
@@ -26,21 +27,18 @@ 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() {
+
}
}