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 a7540dc63e..067833b2b0 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
@@ -92,6 +92,7 @@ public class MetricsConfig extends AbstractConfig {
*/
private Boolean useGlobalRegistry;
+ private Boolean enableRpc;
public MetricsConfig() {
}
@@ -214,4 +215,12 @@ public class MetricsConfig extends AbstractConfig {
public void setUseGlobalRegistry(Boolean useGlobalRegistry) {
this.useGlobalRegistry = useGlobalRegistry;
}
+
+ public Boolean getEnableRpc() {
+ return enableRpc;
+ }
+
+ public void setEnableRpc(Boolean enableRpc) {
+ this.enableRpc = enableRpc;
+ }
}
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
index ff36236df0..73e059465a 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
@@ -1098,6 +1098,12 @@
+
+
+
+
+
+
diff --git a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/filter/MetricsFilter.java b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/filter/MetricsFilter.java
index 4b5cd74502..7b92276f33 100644
--- a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/filter/MetricsFilter.java
+++ b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/filter/MetricsFilter.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.metrics.filter;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.config.MetricsConfig;
import org.apache.dubbo.metrics.event.MetricsEventBus;
import org.apache.dubbo.metrics.event.RequestEvent;
import org.apache.dubbo.rpc.BaseFilter;
@@ -40,20 +41,24 @@ import static org.apache.dubbo.metrics.DefaultConstants.METRIC_THROWABLE;
public class MetricsFilter implements Filter, BaseFilter.Listener, ScopeModelAware {
private ApplicationModel applicationModel;
- private final static ErrorTypeAwareLogger LOGGER = LoggerFactory.getErrorTypeAwareLogger(MetricsFilter.class);
+ private static final ErrorTypeAwareLogger LOGGER = LoggerFactory.getErrorTypeAwareLogger(MetricsFilter.class);
+ private boolean rpcMetricsEnable;
@Override
public void setApplicationModel(ApplicationModel applicationModel) {
this.applicationModel = applicationModel;
+ this.rpcMetricsEnable = applicationModel.getApplicationConfigManager().getMetrics().map(MetricsConfig::getEnableRpc).orElse(true);
}
@Override
public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
- try {
- RequestEvent requestEvent = RequestEvent.toRequestEvent(applicationModel, invocation);
- MetricsEventBus.before(requestEvent, () -> invocation.put(METRIC_FILTER_EVENT, requestEvent));
- } catch (Throwable t) {
- LOGGER.warn(INTERNAL_ERROR, "", "", "Error occurred when invoke.", t);
+ if (rpcMetricsEnable) {
+ try {
+ RequestEvent requestEvent = RequestEvent.toRequestEvent(applicationModel, invocation);
+ MetricsEventBus.before(requestEvent, () -> invocation.put(METRIC_FILTER_EVENT, requestEvent));
+ } catch (Throwable t) {
+ LOGGER.warn(INTERNAL_ERROR, "", "", "Error occurred when invoke.", t);
+ }
}
return invoker.invoke(invocation);
}
@@ -84,6 +89,4 @@ public class MetricsFilter implements Filter, BaseFilter.Listener, ScopeModelAwa
}
}
-
-
}
diff --git a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
index 488986afeb..76db78dfe0 100644
--- a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
+++ b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
@@ -82,7 +82,6 @@ class MetricsFilterTest {
config.setName("MockMetrics");
applicationModel = ApplicationModel.defaultModel();
applicationModel.getApplicationConfigManager().setApplication(config);
-
invocation = new RpcInvocation();
filter = new MetricsFilter();