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() {
+
     }
 }

Reply via email to