You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by ky...@apache.org on 2021/08/27 03:34:04 UTC

[dubbo] branch 3.0-multi-instances updated: Extract FrameworkStatusReportService from FrameworkStatusReporter

This is an automated email from the ASF dual-hosted git repository.

kylixs pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0-multi-instances by this push:
     new af377bf  Extract FrameworkStatusReportService from FrameworkStatusReporter
af377bf is described below

commit af377bf7af4369e1e4d0150fa615d5dcd5fcd1f5
Author: gongdewei <ky...@qq.com>
AuthorDate: Fri Aug 27 11:33:42 2021 +0800

    Extract FrameworkStatusReportService from FrameworkStatusReporter
---
 ...rter.java => FrameworkStatusReportService.java} | 64 ++++++++++--------
 .../status/reporter/FrameworkStatusReporter.java   | 77 +---------------------
 .../dubbo/config/bootstrap/DubboBootstrap.java     |  2 +
 .../dubbo/config/utils/ConfigValidationUtils.java  | 11 ++--
 .../client/migration/MigrationInvoker.java         | 16 ++---
 .../client/migration/MigrationRuleHandler.java     | 11 ++--
 6 files changed, 59 insertions(+), 122 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java b/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportService.java
similarity index 63%
copy from dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java
copy to dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportService.java
index e34996c..0e97d94 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportService.java
@@ -16,49 +16,55 @@
  */
 package org.apache.dubbo.common.status.reporter;
 
-import org.apache.dubbo.common.extension.ExtensionLoader;
-import org.apache.dubbo.common.extension.ExtensionScope;
-import org.apache.dubbo.common.extension.SPI;
+import com.google.gson.Gson;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.rpc.model.ApplicationModel;
-
-import com.google.gson.Gson;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 
 import java.util.HashMap;
 import java.util.Set;
 
-@SPI(scope = ExtensionScope.APPLICATION)
-public interface FrameworkStatusReporter {
-    static final Gson gson = new Gson();
-    Logger logger = LoggerFactory.getLogger(FrameworkStatusReporter.class);
-    String REGISTRATION_STATUS = "registration";
-    String ADDRESS_CONSUMPTION_STATUS = "consumption";
-    String MIGRATION_STEP_STATUS = "migrationStepStatus";
+/**
+ *
+ */
+public class FrameworkStatusReportService implements ScopeModelAware {
+
+    private static final Logger logger = LoggerFactory.getLogger(FrameworkStatusReporter.class);
+    public static final String REGISTRATION_STATUS = "registration";
+    public static final String ADDRESS_CONSUMPTION_STATUS = "consumption";
+    public static final String MIGRATION_STEP_STATUS = "migrationStepStatus";
 
-    void report(String type, Object obj);
+    private ApplicationModel applicationModel;
+    private Set<FrameworkStatusReporter> reporters;
+    private Gson gson = new Gson();
+
+    @Override
+    public void setApplicationModel(ApplicationModel applicationModel) {
+        this.applicationModel = applicationModel;
+        reporters = applicationModel.getExtensionLoader(FrameworkStatusReporter.class).getSupportedExtensionInstances();
+    }
 
-    static void reportRegistrationStatus(Object obj) {
+    public void reportRegistrationStatus(Object obj) {
         doReport(REGISTRATION_STATUS, obj);
     }
 
-    static void reportConsumptionStatus(Object obj) {
+    public void reportConsumptionStatus(Object obj) {
         doReport(ADDRESS_CONSUMPTION_STATUS, obj);
     }
 
-    static void reportMigrationStepStatus(Object obj) {
+    public void reportMigrationStepStatus(Object obj) {
         doReport(MIGRATION_STEP_STATUS, obj);
     }
 
-    static boolean hasReporter() {
-        return ExtensionLoader.getExtensionLoader(FrameworkStatusReporter.class).getSupportedExtensions().size() > 0;
+    public boolean hasReporter() {
+        return reporters.size() > 0;
     }
 
-    static void doReport(String type, Object obj) {
+    private void doReport(String type, Object obj) {
         // TODO, report asynchronously
         try {
-            Set<FrameworkStatusReporter> reporters = ExtensionLoader.getExtensionLoader(FrameworkStatusReporter.class).getSupportedExtensionInstances();
             if (CollectionUtils.isNotEmpty(reporters)) {
                 FrameworkStatusReporter reporter = reporters.iterator().next();
                 reporter.report(type, obj);
@@ -68,18 +74,18 @@ public interface FrameworkStatusReporter {
         }
     }
 
-    static String createRegistrationReport(String status) {
+    public String createRegistrationReport(String status) {
         return "{\"application\":\"" +
-                ApplicationModel.defaultModel().getName() +
-                "\",\"status\":\"" +
-                status +
-                "\"}";
+            applicationModel.getName() +
+            "\",\"status\":\"" +
+            status +
+            "\"}";
     }
 
-    static String createConsumptionReport(String interfaceName, String version, String group, String status) {
+    public String createConsumptionReport(String interfaceName, String version, String group, String status) {
         HashMap<String, String> migrationStatus = new HashMap<>();
         migrationStatus.put("type", "consumption");
-        migrationStatus.put("application", ApplicationModel.defaultModel().getName());
+        migrationStatus.put("application", applicationModel.getName());
         migrationStatus.put("service", interfaceName);
         migrationStatus.put("version", version);
         migrationStatus.put("group", group);
@@ -87,10 +93,10 @@ public interface FrameworkStatusReporter {
         return gson.toJson(migrationStatus);
     }
 
-    static String createMigrationStepReport(String interfaceName, String version, String group, String originStep, String newStep, String success) {
+    public String createMigrationStepReport(String interfaceName, String version, String group, String originStep, String newStep, String success) {
         HashMap<String, String> migrationStatus = new HashMap<>();
         migrationStatus.put("type", "migrationStepStatus");
-        migrationStatus.put("application", ApplicationModel.defaultModel().getName());
+        migrationStatus.put("application", applicationModel.getName());
         migrationStatus.put("service", interfaceName);
         migrationStatus.put("version", version);
         migrationStatus.put("group", group);
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java b/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java
index e34996c..293bb49 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java
@@ -16,87 +16,14 @@
  */
 package org.apache.dubbo.common.status.reporter;
 
-import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.common.utils.CollectionUtils;
-import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 
-import com.google.gson.Gson;
-
-import java.util.HashMap;
-import java.util.Set;
 
 @SPI(scope = ExtensionScope.APPLICATION)
-public interface FrameworkStatusReporter {
-    static final Gson gson = new Gson();
-    Logger logger = LoggerFactory.getLogger(FrameworkStatusReporter.class);
-    String REGISTRATION_STATUS = "registration";
-    String ADDRESS_CONSUMPTION_STATUS = "consumption";
-    String MIGRATION_STEP_STATUS = "migrationStepStatus";
+public interface FrameworkStatusReporter extends ScopeModelAware {
 
     void report(String type, Object obj);
 
-    static void reportRegistrationStatus(Object obj) {
-        doReport(REGISTRATION_STATUS, obj);
-    }
-
-    static void reportConsumptionStatus(Object obj) {
-        doReport(ADDRESS_CONSUMPTION_STATUS, obj);
-    }
-
-    static void reportMigrationStepStatus(Object obj) {
-        doReport(MIGRATION_STEP_STATUS, obj);
-    }
-
-    static boolean hasReporter() {
-        return ExtensionLoader.getExtensionLoader(FrameworkStatusReporter.class).getSupportedExtensions().size() > 0;
-    }
-
-    static void doReport(String type, Object obj) {
-        // TODO, report asynchronously
-        try {
-            Set<FrameworkStatusReporter> reporters = ExtensionLoader.getExtensionLoader(FrameworkStatusReporter.class).getSupportedExtensionInstances();
-            if (CollectionUtils.isNotEmpty(reporters)) {
-                FrameworkStatusReporter reporter = reporters.iterator().next();
-                reporter.report(type, obj);
-            }
-        } catch (Exception e) {
-            logger.info("Report " + type + " status failed because of " + e.getMessage());
-        }
-    }
-
-    static String createRegistrationReport(String status) {
-        return "{\"application\":\"" +
-                ApplicationModel.defaultModel().getName() +
-                "\",\"status\":\"" +
-                status +
-                "\"}";
-    }
-
-    static String createConsumptionReport(String interfaceName, String version, String group, String status) {
-        HashMap<String, String> migrationStatus = new HashMap<>();
-        migrationStatus.put("type", "consumption");
-        migrationStatus.put("application", ApplicationModel.defaultModel().getName());
-        migrationStatus.put("service", interfaceName);
-        migrationStatus.put("version", version);
-        migrationStatus.put("group", group);
-        migrationStatus.put("status", status);
-        return gson.toJson(migrationStatus);
-    }
-
-    static String createMigrationStepReport(String interfaceName, String version, String group, String originStep, String newStep, String success) {
-        HashMap<String, String> migrationStatus = new HashMap<>();
-        migrationStatus.put("type", "migrationStepStatus");
-        migrationStatus.put("application", ApplicationModel.defaultModel().getName());
-        migrationStatus.put("service", interfaceName);
-        migrationStatus.put("version", version);
-        migrationStatus.put("group", group);
-        migrationStatus.put("originStep", originStep);
-        migrationStatus.put("newStep", newStep);
-        migrationStatus.put("success", success);
-        return gson.toJson(migrationStatus);
-    }
 }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
index 0aaa3c3..5217dcc 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
@@ -29,6 +29,7 @@ import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.lang.ShutdownHookCallbacks;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.status.reporter.FrameworkStatusReportService;
 import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
 import org.apache.dubbo.common.utils.ArrayUtils;
 import org.apache.dubbo.common.utils.CollectionUtils;
@@ -278,6 +279,7 @@ public class DubboBootstrap {
 
         beanFactory.registerBean(MetadataReportInstance.class);
         beanFactory.registerBean(RemoteMetadataServiceImpl.class);
+        beanFactory.registerBean(FrameworkStatusReportService.class);
     }
 
     public ApplicationModel getApplicationModel() {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
index d6188b7..c0b90cb 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
@@ -24,7 +24,7 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.serialize.Serialization;
 import org.apache.dubbo.common.status.StatusChecker;
-import org.apache.dubbo.common.status.reporter.FrameworkStatusReporter;
+import org.apache.dubbo.common.status.reporter.FrameworkStatusReportService;
 import org.apache.dubbo.common.threadpool.ThreadPool;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.ConfigUtils;
@@ -62,6 +62,7 @@ import org.apache.dubbo.rpc.ProxyFactory;
 import org.apache.dubbo.rpc.cluster.Cluster;
 import org.apache.dubbo.rpc.cluster.LoadBalance;
 import org.apache.dubbo.rpc.cluster.filter.ClusterFilter;
+import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.support.MockInvoker;
 
 import java.net.InetAddress;
@@ -108,7 +109,6 @@ import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_TYPE_
 import static org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_PROTOCOL;
 import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
 import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
-import static org.apache.dubbo.common.status.reporter.FrameworkStatusReporter.createRegistrationReport;
 import static org.apache.dubbo.config.Constants.ARCHITECTURE;
 import static org.apache.dubbo.config.Constants.CONTEXTPATH_KEY;
 import static org.apache.dubbo.config.Constants.DUBBO_IP_TO_REGISTRY;
@@ -222,10 +222,10 @@ public class ConfigValidationUtils {
                 }
             }
         }
-        return genCompatibleRegistries(registryList, provider);
+        return genCompatibleRegistries(interfaceConfig.getApplicationModel(), registryList, provider);
     }
 
-    private static List<URL> genCompatibleRegistries(List<URL> registryList, boolean provider) {
+    private static List<URL> genCompatibleRegistries(ApplicationModel applicationModel, List<URL> registryList, boolean provider) {
         List<URL> result = new ArrayList<>(registryList.size());
         registryList.forEach(registryURL -> {
             if (provider) {
@@ -264,7 +264,8 @@ public class ConfigValidationUtils {
                     }
                 }
 
-                FrameworkStatusReporter.reportRegistrationStatus(createRegistrationReport(registerMode));
+                FrameworkStatusReportService reportService = applicationModel.getBeanFactory().getBean(FrameworkStatusReportService.class);
+                reportService.reportRegistrationStatus(reportService.createRegistrationReport(registerMode));
             } else {
                 result.add(registryURL);
             }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
index c133182..cf81b68 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
@@ -20,7 +20,6 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.common.status.reporter.FrameworkStatusReporter;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.registry.Registry;
@@ -44,7 +43,6 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.TimeUnit;
 
-import static org.apache.dubbo.common.status.reporter.FrameworkStatusReporter.createConsumptionReport;
 import static org.apache.dubbo.registry.client.migration.model.MigrationStep.APPLICATION_FIRST;
 import static org.apache.dubbo.rpc.cluster.Constants.REFER_KEY;
 
@@ -426,9 +424,10 @@ public class MigrationInvoker<T> implements MigrationClusterInvoker<T> {
         }
         setListener(serviceDiscoveryInvoker, () -> {
             latch.countDown();
-            FrameworkStatusReporter.reportConsumptionStatus(
-                createConsumptionReport(consumerUrl.getServiceInterface(), consumerUrl.getVersion(), consumerUrl.getGroup(), "app")
-            );
+            //TODO FrameworkStatusReporter
+//            FrameworkStatusReporter.reportConsumptionStatus(
+//                createConsumptionReport(consumerUrl.getServiceInterface(), consumerUrl.getVersion(), consumerUrl.getGroup(), "app")
+//            );
             if (step == APPLICATION_FIRST) {
                 calcPreferredInvoker(rule);
             }
@@ -449,9 +448,10 @@ public class MigrationInvoker<T> implements MigrationClusterInvoker<T> {
         }
         setListener(invoker, () -> {
             latch.countDown();
-            FrameworkStatusReporter.reportConsumptionStatus(
-                createConsumptionReport(consumerUrl.getServiceInterface(), consumerUrl.getVersion(), consumerUrl.getGroup(), "interface")
-            );
+            //TODO FrameworkStatusReporter
+//            FrameworkStatusReporter.reportConsumptionStatus(
+//                createConsumptionReport(consumerUrl.getServiceInterface(), consumerUrl.getVersion(), consumerUrl.getGroup(), "interface")
+//            );
             if (step == APPLICATION_FIRST) {
                 calcPreferredInvoker(rule);
             }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
index 052f225..5321f04 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
@@ -98,11 +98,12 @@ public class MigrationRuleHandler<T> {
     }
 
     private void report(MigrationStep step, MigrationStep originStep, String success) {
-        if (FrameworkStatusReporter.hasReporter()) {
-            FrameworkStatusReporter.reportMigrationStepStatus(
-                    FrameworkStatusReporter.createMigrationStepReport(consumerURL.getServiceInterface(), consumerURL.getVersion(),
-                            consumerURL.getGroup(), String.valueOf(originStep), String.valueOf(step), success));
-        }
+        //TODO FrameworkStatusReporter
+//        if (FrameworkStatusReporter.hasReporter()) {
+//            FrameworkStatusReporter.reportMigrationStepStatus(
+//                    FrameworkStatusReporter.createMigrationStepReport(consumerURL.getServiceInterface(), consumerURL.getVersion(),
+//                            consumerURL.getGroup(), String.valueOf(originStep), String.valueOf(step), success));
+//        }
     }
 
     private void setMigrationRule(MigrationRule rule) {