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();