From 913e66e96586ee1fd30362f76c6d1ac6781bda32 Mon Sep 17 00:00:00 2001 From: wxbty <38374721+wxbty@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:37:37 +0800 Subject: [PATCH 01/21] Supplementary dirctory metrics data push (#12539) * Supplementary dirctory metrics data push * puplish after publish --- .../dubbo/rpc/cluster/directory/AbstractDirectory.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java index a1ea668291..c4561dfe4f 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java @@ -476,15 +476,21 @@ public abstract class AbstractDirectory implements Directory { } private boolean addValidInvoker(Invoker invoker) { + boolean result; synchronized (this.validInvokers) { - return this.validInvokers.add(invoker); + result = this.validInvokers.add(invoker); } + MetricsEventBus.publish(RegistryEvent.refreshDirectoryEvent(applicationModel, getSummary())); + return result; } private boolean removeValidInvoker(Invoker invoker) { + boolean result; synchronized (this.validInvokers) { - return this.validInvokers.remove(invoker); + result = this.validInvokers.remove(invoker); } + MetricsEventBus.publish(RegistryEvent.refreshDirectoryEvent(applicationModel, getSummary())); + return result; } protected abstract List> doList(SingleRouterChain singleRouterChain, From ddf3da46acfcc31a15c59e0eba489aec10acf23a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:38:22 +0800 Subject: [PATCH 02/21] Bump micrometer-core from 1.11.0 to 1.11.1 (#12558) Bumps [micrometer-core](https://github.com/micrometer-metrics/micrometer) from 1.11.0 to 1.11.1. - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.11.0...v1.11.1) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dubbo-demo/dubbo-demo-spring-boot/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-demo/dubbo-demo-spring-boot/pom.xml b/dubbo-demo/dubbo-demo-spring-boot/pom.xml index 230e3fc196..6a5f84e772 100644 --- a/dubbo-demo/dubbo-demo-spring-boot/pom.xml +++ b/dubbo-demo/dubbo-demo-spring-boot/pom.xml @@ -38,7 +38,7 @@ true 2.7.12 2.7.12 - 1.11.0 + 1.11.1 From d99bb3df364752cf5b182b6af96d014c421eb933 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:38:30 +0800 Subject: [PATCH 03/21] Bump grpc.version from 1.55.1 to 1.56.0 (#12559) Bumps `grpc.version` from 1.55.1 to 1.56.0. Updates `grpc-core` from 1.55.1 to 1.56.0 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0) Updates `grpc-stub` from 1.55.1 to 1.56.0 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0) Updates `grpc-protobuf` from 1.55.1 to 1.56.0 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0) Updates `grpc-context` from 1.55.1 to 1.56.0 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0) Updates `grpc-netty-shaded` from 1.55.1 to 1.56.0 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0) Updates `grpc-netty` from 1.55.1 to 1.56.0 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0) Updates `grpc-grpclb` from 1.55.1 to 1.56.0 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0) --- updated-dependencies: - dependency-name: io.grpc:grpc-core dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.grpc:grpc-stub dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.grpc:grpc-protobuf dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.grpc:grpc-context dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.grpc:grpc-netty-shaded dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.grpc:grpc-netty dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.grpc:grpc-grpclb dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dubbo-dependencies-bom/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index 1c3a7eec13..1fc4dfd9a1 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -150,7 +150,7 @@ 8.5.87 0.7.5 2.2.3 - 1.55.1 + 1.56.0 0.8.1 1.2.2 From de53cd8b0fd19fc0242b2b3fad43ed6f0aabc665 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:38:39 +0800 Subject: [PATCH 04/21] Bump micrometer-bom from 1.11.0 to 1.11.1 (#12560) Bumps [micrometer-bom](https://github.com/micrometer-metrics/micrometer) from 1.11.0 to 1.11.1. - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.11.0...v1.11.1) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dubbo-dependencies-bom/pom.xml | 2 +- .../dubbo-spring-boot-starters/observability/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index 1fc4dfd9a1..549ea92052 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -133,7 +133,7 @@ 3.12.0 1.8.0 0.1.35 - 1.11.0 + 1.11.1 1.26.0 2.16.4 1.1.1 diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml index 17343de508..7bf154f7d7 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml +++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml @@ -38,7 +38,7 @@ - 1.11.0 + 1.11.1 1.1.1 1.27.0 2.16.4 From 5ee7d72a9313e98c208d7b42b7528bef9cc0655a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:38:49 +0800 Subject: [PATCH 05/21] Bump native-maven-plugin from 0.9.22 to 0.9.23 (#12561) Bumps [native-maven-plugin](https://github.com/graalvm/native-build-tools) from 0.9.22 to 0.9.23. - [Release notes](https://github.com/graalvm/native-build-tools/releases) - [Commits](https://github.com/graalvm/native-build-tools/compare/0.9.22...0.9.23) --- updated-dependencies: - dependency-name: org.graalvm.buildtools:native-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml | 2 +- dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml index e86b1e5e49..ef128333bd 100644 --- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml +++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml @@ -224,7 +224,7 @@ org.graalvm.buildtools native-maven-plugin - 0.9.22 + 0.9.23 ${project.build.outputDirectory} diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml index 3649d381e2..1f2fc06b5b 100644 --- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml +++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml @@ -222,7 +222,7 @@ org.graalvm.buildtools native-maven-plugin - 0.9.22 + 0.9.23 ${project.build.outputDirectory} From 9797e971fe1f45dd438f1dc3c58a15475666f71e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:38:56 +0800 Subject: [PATCH 06/21] Bump reactor-core from 3.5.6 to 3.5.7 (#12562) Bumps [reactor-core](https://github.com/reactor/reactor-core) from 3.5.6 to 3.5.7. - [Release notes](https://github.com/reactor/reactor-core/releases) - [Commits](https://github.com/reactor/reactor-core/compare/v3.5.6...v3.5.7) --- updated-dependencies: - dependency-name: io.projectreactor:reactor-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dubbo-dependencies-bom/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index 549ea92052..966bdd414f 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -140,7 +140,7 @@ 3.3 0.16.0 1.0.4 - 3.5.6 + 3.5.7 2.2.21 3.14.9 From 33edc4f17084c222368ac97761c07cf0d9d16948 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:39:10 +0800 Subject: [PATCH 07/21] Bump protobuf-java_version from 3.23.2 to 3.23.3 (#12565) Bumps `protobuf-java_version` from 3.23.2 to 3.23.3. Updates `protobuf-java` from 3.23.2 to 3.23.3 - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.23.2...v3.23.3) Updates `protobuf-java-util` from 3.23.2 to 3.23.3 --- updated-dependencies: - dependency-name: com.google.protobuf:protobuf-java dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.protobuf:protobuf-java-util dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dubbo-dependencies-bom/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index 966bdd414f..28309c8cb2 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -114,7 +114,7 @@ 3.5.5 0.18.1 4.0.66 - 3.23.2 + 3.23.3 1.3.2 3.1.0 9.4.51.v20230217 From f81c3f3a44d3bd634f4f63fce83b0bcbaae86040 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Mon, 19 Jun 2023 18:56:01 +0800 Subject: [PATCH 08/21] Cache interfaceClass in advance to prevent IndexOutOfBoundsException (#12567) --- .../apache/dubbo/rpc/cluster/directory/StaticDirectory.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java index 8a17dc0fc0..36e3d3eb59 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java @@ -36,6 +36,7 @@ import static org.apache.dubbo.common.constants.LoggerCodeConstants.CLUSTER_FAIL */ public class StaticDirectory extends AbstractDirectory { private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(StaticDirectory.class); + private final Class interfaceClass; public StaticDirectory(List> invokers) { this(null, invokers, null); @@ -55,11 +56,12 @@ public class StaticDirectory extends AbstractDirectory { throw new IllegalArgumentException("invokers == null"); } this.setInvokers(new BitList<>(invokers)); + this.interfaceClass = invokers.get(0).getInterface(); } @Override public Class getInterface() { - return getInvokers().get(0).getInterface(); + return interfaceClass; } @Override From 85d45b959d70219c727b063d87ee7afc86cce492 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Mon, 19 Jun 2023 18:56:13 +0800 Subject: [PATCH 09/21] Check if jackson2 security dependency existed (#12568) --- .../filter/AuthenticationExceptionTranslatorFilter.java | 6 +++++- .../filter/ContextHolderAuthenticationPrepareFilter.java | 8 ++++++-- .../filter/ContextHolderAuthenticationResolverFilter.java | 6 +++++- .../security/model/SecurityScopeModelInitializer.java | 6 +++++- .../apache/dubbo/spring/security/utils/SecurityNames.java | 2 ++ 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/AuthenticationExceptionTranslatorFilter.java b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/AuthenticationExceptionTranslatorFilter.java index 7885250782..00dadabf59 100644 --- a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/AuthenticationExceptionTranslatorFilter.java +++ b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/AuthenticationExceptionTranslatorFilter.java @@ -24,12 +24,16 @@ import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Result; import org.apache.dubbo.rpc.RpcException; + import org.springframework.security.access.AccessDeniedException; import org.springframework.security.core.AuthenticationException; + import static org.apache.dubbo.rpc.RpcException.AUTHORIZATION_EXCEPTION; +import static org.apache.dubbo.spring.security.utils.SecurityNames.CORE_JACKSON_2_MODULE_CLASS_NAME; +import static org.apache.dubbo.spring.security.utils.SecurityNames.OBJECT_MAPPER_CLASS_NAME; import static org.apache.dubbo.spring.security.utils.SecurityNames.SECURITY_CONTEXT_HOLDER_CLASS_NAME; -@Activate(group = CommonConstants.PROVIDER, order =Integer.MAX_VALUE,onClass = SECURITY_CONTEXT_HOLDER_CLASS_NAME) +@Activate(group = CommonConstants.PROVIDER, order = Integer.MAX_VALUE, onClass = {SECURITY_CONTEXT_HOLDER_CLASS_NAME, CORE_JACKSON_2_MODULE_CLASS_NAME, OBJECT_MAPPER_CLASS_NAME}) public class AuthenticationExceptionTranslatorFilter implements Filter, Filter.Listener { diff --git a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/ContextHolderAuthenticationPrepareFilter.java b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/ContextHolderAuthenticationPrepareFilter.java index e2a8fe0bc6..6617f4be85 100644 --- a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/ContextHolderAuthenticationPrepareFilter.java +++ b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/ContextHolderAuthenticationPrepareFilter.java @@ -27,13 +27,17 @@ import org.apache.dubbo.rpc.cluster.filter.ClusterFilter; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.spring.security.jackson.ObjectMapperCodec; import org.apache.dubbo.spring.security.utils.SecurityNames; + import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; + +import static org.apache.dubbo.spring.security.utils.SecurityNames.CORE_JACKSON_2_MODULE_CLASS_NAME; +import static org.apache.dubbo.spring.security.utils.SecurityNames.OBJECT_MAPPER_CLASS_NAME; import static org.apache.dubbo.spring.security.utils.SecurityNames.SECURITY_CONTEXT_HOLDER_CLASS_NAME; -@Activate(group = CommonConstants.CONSUMER, order = -10000,onClass = SECURITY_CONTEXT_HOLDER_CLASS_NAME) -public class ContextHolderAuthenticationPrepareFilter implements ClusterFilter{ +@Activate(group = CommonConstants.CONSUMER, order = -10000, onClass = {SECURITY_CONTEXT_HOLDER_CLASS_NAME, CORE_JACKSON_2_MODULE_CLASS_NAME, OBJECT_MAPPER_CLASS_NAME}) +public class ContextHolderAuthenticationPrepareFilter implements ClusterFilter { private final ObjectMapperCodec mapper; diff --git a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/ContextHolderAuthenticationResolverFilter.java b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/ContextHolderAuthenticationResolverFilter.java index acd5026409..9f2567185a 100644 --- a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/ContextHolderAuthenticationResolverFilter.java +++ b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/filter/ContextHolderAuthenticationResolverFilter.java @@ -27,11 +27,15 @@ import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.spring.security.jackson.ObjectMapperCodec; import org.apache.dubbo.spring.security.utils.SecurityNames; + import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; + +import static org.apache.dubbo.spring.security.utils.SecurityNames.CORE_JACKSON_2_MODULE_CLASS_NAME; +import static org.apache.dubbo.spring.security.utils.SecurityNames.OBJECT_MAPPER_CLASS_NAME; import static org.apache.dubbo.spring.security.utils.SecurityNames.SECURITY_CONTEXT_HOLDER_CLASS_NAME; -@Activate(group = CommonConstants.PROVIDER, order = -10000,onClass = SECURITY_CONTEXT_HOLDER_CLASS_NAME) +@Activate(group = CommonConstants.PROVIDER, order = -10000, onClass = {SECURITY_CONTEXT_HOLDER_CLASS_NAME, CORE_JACKSON_2_MODULE_CLASS_NAME, OBJECT_MAPPER_CLASS_NAME}) public class ContextHolderAuthenticationResolverFilter implements Filter { private final ObjectMapperCodec mapper; diff --git a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/model/SecurityScopeModelInitializer.java b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/model/SecurityScopeModelInitializer.java index 9679334f6f..286adedb1d 100644 --- a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/model/SecurityScopeModelInitializer.java +++ b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/model/SecurityScopeModelInitializer.java @@ -25,10 +25,14 @@ import org.apache.dubbo.rpc.model.ModuleModel; import org.apache.dubbo.rpc.model.ScopeModelInitializer; import org.apache.dubbo.spring.security.jackson.ObjectMapperCodec; import org.apache.dubbo.spring.security.jackson.ObjectMapperCodecCustomer; + import java.util.Set; + +import static org.apache.dubbo.spring.security.utils.SecurityNames.CORE_JACKSON_2_MODULE_CLASS_NAME; +import static org.apache.dubbo.spring.security.utils.SecurityNames.OBJECT_MAPPER_CLASS_NAME; import static org.apache.dubbo.spring.security.utils.SecurityNames.SECURITY_CONTEXT_HOLDER_CLASS_NAME; -@Activate(onClass = SECURITY_CONTEXT_HOLDER_CLASS_NAME) +@Activate(onClass = {SECURITY_CONTEXT_HOLDER_CLASS_NAME, CORE_JACKSON_2_MODULE_CLASS_NAME, OBJECT_MAPPER_CLASS_NAME}) public class SecurityScopeModelInitializer implements ScopeModelInitializer { @Override diff --git a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/utils/SecurityNames.java b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/utils/SecurityNames.java index 010d8d4f17..97e167095b 100644 --- a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/utils/SecurityNames.java +++ b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/utils/SecurityNames.java @@ -22,6 +22,8 @@ final public class SecurityNames { public static final String SECURITY_AUTHENTICATION_CONTEXT_KEY = "security_authentication_context"; public static final String SECURITY_CONTEXT_HOLDER_CLASS_NAME = "org.springframework.security.core.context.SecurityContextHolder"; + public static final String CORE_JACKSON_2_MODULE_CLASS_NAME = "org.springframework.security.jackson2.CoreJackson2Module"; + public static final String OBJECT_MAPPER_CLASS_NAME = "com.fasterxml.jackson.databind.ObjectMapper"; private SecurityNames() {} From cb69b2eca149ea8e738a65ec4397a4556d09962f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 18:56:28 +0800 Subject: [PATCH 10/21] Bump micrometer-tracing-bom from 1.1.1 to 1.1.2 (#12564) Bumps [micrometer-tracing-bom](https://github.com/micrometer-metrics/tracing) from 1.1.1 to 1.1.2. - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.1.1...v1.1.2) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-tracing-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dubbo-dependencies-bom/pom.xml | 2 +- .../dubbo-spring-boot-starters/observability/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index 28309c8cb2..bf84ad10ac 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -136,7 +136,7 @@ 1.11.1 1.26.0 2.16.4 - 1.1.1 + 1.1.2 3.3 0.16.0 1.0.4 diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml index 7bf154f7d7..77065023c9 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml +++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/pom.xml @@ -39,7 +39,7 @@ 1.11.1 - 1.1.1 + 1.1.2 1.27.0 2.16.4 0.16.0 From 9a9b28bf098229dc912f2962178fef748577ff14 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Mon, 19 Jun 2023 21:28:45 +0800 Subject: [PATCH 11/21] Fix unable to getAppName in InjvmInvoker (#12574) --- .../rpc/protocol/injvm/InjvmInvoker.java | 31 +++++++++----- .../dubbo/rpc/protocol/injvm/DemoService.java | 4 ++ .../rpc/protocol/injvm/DemoServiceImpl.java | 9 +++++ .../rpc/protocol/injvm/InjvmProtocolTest.java | 40 ++++++++++++++++++- 4 files changed, 72 insertions(+), 12 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-injvm/src/main/java/org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java b/dubbo-rpc/dubbo-rpc-injvm/src/main/java/org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java index 971b4f7402..70cf0b3534 100644 --- a/dubbo-rpc/dubbo-rpc-injvm/src/main/java/org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java +++ b/dubbo-rpc/dubbo-rpc-injvm/src/main/java/org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java @@ -94,7 +94,6 @@ public class InjvmInvoker extends AbstractInvoker { if (exporter == null) { throw new RpcException("Service [" + key + "] not found."); } - RpcContext.getServiceContext().setRemoteAddress(LOCALHOST_VALUE, 0); // Solve local exposure, the server opens the token, and the client call fails. Invoker invoker = exporter.getInvoker(); URL serverURL = invoker.getUrl(); @@ -122,16 +121,24 @@ public class InjvmInvoker extends AbstractInvoker { // use consumer executor ExecutorService executor = executorRepository.createExecutorIfAbsent(ExecutorUtil.setThreadName(getUrl(), SERVER_THREAD_POOL_NAME)); CompletableFuture appResponseFuture = CompletableFuture.supplyAsync(() -> { - Result result = invoker.invoke(copiedInvocation); - if (result.hasException()) { - AppResponse appResponse = new AppResponse(result.getException()); - appResponse.setObjectAttachments(new HashMap<>(result.getObjectAttachments())); - return appResponse; - } else { - rebuildValue(invocation, desc, result); - AppResponse appResponse = new AppResponse(result.getValue()); - appResponse.setObjectAttachments(new HashMap<>(result.getObjectAttachments())); - return appResponse; + // clear thread local before child invocation, prevent context pollution + InternalThreadLocalMap originTL = InternalThreadLocalMap.getAndRemove(); + try { + RpcContext.getServiceContext().setRemoteAddress(LOCALHOST_VALUE, 0); + RpcContext.getServiceContext().setRemoteApplicationName(getUrl().getApplication()); + Result result = invoker.invoke(copiedInvocation); + if (result.hasException()) { + AppResponse appResponse = new AppResponse(result.getException()); + appResponse.setObjectAttachments(new HashMap<>(result.getObjectAttachments())); + return appResponse; + } else { + rebuildValue(invocation, desc, result); + AppResponse appResponse = new AppResponse(result.getValue()); + appResponse.setObjectAttachments(new HashMap<>(result.getObjectAttachments())); + return appResponse; + } + } finally { + InternalThreadLocalMap.set(originTL); } }, executor); // save for 2.6.x compatibility, for example, TraceFilter in Zipkin uses com.alibaba.xxx.FutureAdapter @@ -144,6 +151,8 @@ public class InjvmInvoker extends AbstractInvoker { // clear thread local before child invocation, prevent context pollution InternalThreadLocalMap originTL = InternalThreadLocalMap.getAndRemove(); try { + RpcContext.getServiceContext().setRemoteAddress(LOCALHOST_VALUE, 0); + RpcContext.getServiceContext().setRemoteApplicationName(getUrl().getApplication()); result = invoker.invoke(copiedInvocation); } finally { InternalThreadLocalMap.set(originTL); diff --git a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/DemoService.java b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/DemoService.java index c9d2e63d49..9a09ed9617 100644 --- a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/DemoService.java +++ b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/DemoService.java @@ -40,4 +40,8 @@ public interface DemoService { Type enumlength(Type... types); String getAsyncResult(); + + String getApplication(); + + String getRemoteAddress(); } diff --git a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/DemoServiceImpl.java b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/DemoServiceImpl.java index c59847b298..b4d2314a6d 100644 --- a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/DemoServiceImpl.java +++ b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/DemoServiceImpl.java @@ -80,4 +80,13 @@ public class DemoServiceImpl implements DemoService { return "DONE"; } + @Override + public String getApplication() { + return RpcContext.getServiceContext().getRemoteApplicationName(); + } + + @Override + public String getRemoteAddress() { + return RpcContext.getServiceContext().getRemoteAddressString(); + } } diff --git a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmProtocolTest.java b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmProtocolTest.java index 5d4103a840..3ef342e8ea 100644 --- a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmProtocolTest.java +++ b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmProtocolTest.java @@ -19,10 +19,13 @@ package org.apache.dubbo.rpc.protocol.injvm; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.extension.ExtensionLoader; +import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.rpc.Exporter; +import org.apache.dubbo.rpc.FutureContext; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Protocol; import org.apache.dubbo.rpc.ProxyFactory; +import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.FrameworkModel; @@ -32,7 +35,9 @@ import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.concurrent.ExecutionException; +import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY; import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY; import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY; @@ -129,7 +134,7 @@ class InjvmProtocolTest { } @Test - void testLocalProtocolAsync() { + void testLocalProtocolAsync() throws ExecutionException, InterruptedException { DemoService service = new DemoServiceImpl(); URL url = URL.valueOf("injvm://127.0.0.1/TestService") .addParameter(ASYNC_KEY, true) @@ -141,6 +146,39 @@ class InjvmProtocolTest { exporters.add(exporter); service = proxy.getProxy(protocol.refer(DemoService.class, url)); assertNull(service.getAsyncResult()); + assertEquals("DONE", FutureContext.getContext().getCompletableFuture().get()); + } + + @Test + void testApplication() { + DemoService service = new DemoServiceImpl(); + URL url = URL.valueOf("injvm://127.0.0.1/TestService") + .addParameter(INTERFACE_KEY, DemoService.class.getName()).addParameter("application", "consumer") + .addParameter(APPLICATION_KEY, "test-app") + .setScopeModel(ApplicationModel.defaultModel().getDefaultModule()); + Invoker invoker = proxy.getInvoker(service, DemoService.class, url); + assertTrue(invoker.isAvailable()); + Exporter exporter = protocol.export(invoker); + exporters.add(exporter); + service = proxy.getProxy(protocol.refer(DemoService.class, url)); + assertEquals("test-app", service.getApplication()); + assertTrue(StringUtils.isEmpty(RpcContext.getServiceContext().getRemoteApplicationName())); + } + + @Test + void testRemoteAddress() { + DemoService service = new DemoServiceImpl(); + URL url = URL.valueOf("injvm://127.0.0.1/TestService") + .addParameter(INTERFACE_KEY, DemoService.class.getName()).addParameter("application", "consumer") + .addParameter(APPLICATION_KEY, "test-app") + .setScopeModel(ApplicationModel.defaultModel().getDefaultModule()); + Invoker invoker = proxy.getInvoker(service, DemoService.class, url); + assertTrue(invoker.isAvailable()); + Exporter exporter = protocol.export(invoker); + exporters.add(exporter); + service = proxy.getProxy(protocol.refer(DemoService.class, url)); + assertEquals("127.0.0.1:0", service.getRemoteAddress()); + assertNull(RpcContext.getServiceContext().getRemoteAddress()); } } From a941985c9938548fe70a1e3fcc7ef97705c8d530 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Mon, 19 Jun 2023 21:29:14 +0800 Subject: [PATCH 12/21] Skip check ignored extensions (#12571) --- .../common/extension/ExtensionLoader.java | 5 +++- .../common/extension/ExtensionLoaderTest.java | 29 +++++++++++++++++-- .../config/utils/ConfigValidationUtils.java | 3 +- .../dubbo/config/AbstractConfigTest.java | 19 +++++++++++- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java index 5f000daa8a..be0f96d247 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java @@ -73,6 +73,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; +import java.util.stream.Collectors; import static java.util.Arrays.asList; import static java.util.ServiceLoader.load; @@ -346,7 +347,9 @@ public class ExtensionLoader { checkDestroyed(); // solve the bug of using @SPI's wrapper method to report a null pointer exception. Map, T> activateExtensionsMap = new TreeMap<>(activateComparator); - List names = values == null ? new ArrayList<>(0) : asList(values); + List names = values == null ? + new ArrayList<>(0) : + Arrays.stream(values).map(StringUtils::trim).collect(Collectors.toList()); Set namesSet = new HashSet<>(names); if (!namesSet.contains(REMOVE_VALUE_PREFIX + DEFAULT_KEY)) { if (cachedActivateGroups.size() == 0) { diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java index 4f8f1474f1..2e2b2a0884 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java @@ -221,7 +221,7 @@ class ExtensionLoaderTest { } @Test - void test_getActivateExtension_WithWrapper() { + void test_getActivateExtension_WithWrapper1() { URL url = URL.valueOf("test://localhost/test"); List list = getExtensionLoader(ActivateExt1.class) .getActivateExtension(url, new String[]{}, "order"); @@ -596,7 +596,7 @@ class ExtensionLoaderTest { } @Test - void testLoadDefaultActivateExtension() { + void testLoadDefaultActivateExtension1() { // test default URL url = URL.valueOf("test://localhost/test?ext=order1,default"); List list = getExtensionLoader(ActivateExt1.class) @@ -620,6 +620,31 @@ class ExtensionLoaderTest { assertSame(list.get(1).getClass(), OrderActivateExtImpl1.class); } + @Test + void testLoadDefaultActivateExtension2() { + // test default + URL url = URL.valueOf("test://localhost/test?ext=order1 , default"); + List list = getExtensionLoader(ActivateExt1.class) + .getActivateExtension(url, "ext", "default_group"); + Assertions.assertEquals(2, list.size()); + assertSame(list.get(0).getClass(), OrderActivateExtImpl1.class); + assertSame(list.get(1).getClass(), ActivateExt1Impl1.class); + + url = URL.valueOf("test://localhost/test?ext=default, order1"); + list = getExtensionLoader(ActivateExt1.class) + .getActivateExtension(url, "ext", "default_group"); + Assertions.assertEquals(2, list.size()); + assertSame(list.get(0).getClass(), ActivateExt1Impl1.class); + assertSame(list.get(1).getClass(), OrderActivateExtImpl1.class); + + url = URL.valueOf("test://localhost/test?ext=order1"); + list = getExtensionLoader(ActivateExt1.class) + .getActivateExtension(url, "ext", "default_group"); + Assertions.assertEquals(2, list.size()); + assertSame(list.get(0).getClass(), ActivateExt1Impl1.class); + assertSame(list.get(1).getClass(), OrderActivateExtImpl1.class); + } + @Test void testInjectExtension() { // register bean for test ScopeBeanExtensionInjector 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 70380568ef..4e9c20d415 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 @@ -670,8 +670,9 @@ public class ConfigValidationUtils { if (isNotEmpty(value)) { String[] values = value.split("\\s*[,]+\\s*"); for (String v : values) { + v = StringUtils.trim(v); if (v.startsWith(REMOVE_VALUE_PREFIX)) { - v = v.substring(1); + continue; } if (DEFAULT_KEY.equals(v)) { continue; diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java index 0a811bbae5..1a986a5884 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java @@ -207,8 +207,25 @@ class AbstractConfigTest { @Test void checkMultiExtension2() { + try { + ConfigValidationUtils.checkMultiExtension(ApplicationModel.defaultModel(), Greeting.class, "hello", "default,-world"); + } catch (Throwable t) { + Assertions.fail(t); + } + } + @Test + void checkMultiExtension3() { Assertions.assertThrows(IllegalStateException.class, - () -> ConfigValidationUtils.checkMultiExtension(ApplicationModel.defaultModel(), Greeting.class, "hello", "default,-world")); + () -> ConfigValidationUtils.checkMultiExtension(ApplicationModel.defaultModel(), Greeting.class, "hello", "default , world")); + } + + @Test + void checkMultiExtension4() { + try { + ConfigValidationUtils.checkMultiExtension(ApplicationModel.defaultModel(), Greeting.class, "hello", "default , -world "); + } catch (Throwable t) { + Assertions.fail(t); + } } @Test From 8ad792c2876abb5c94b3c6393ee0ffce2117992f Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Mon, 19 Jun 2023 21:29:24 +0800 Subject: [PATCH 13/21] Add transient to some overrided field (#12570) --- .../apache/dubbo/config/AbstractReferenceConfig.java | 3 +++ .../java/org/apache/dubbo/config/ModuleConfig.java | 3 +++ .../org/apache/dubbo/config/ReferenceConfigBase.java | 1 + .../org/apache/dubbo/config/ServiceConfigBase.java | 1 + .../main/java/com/alibaba/dubbo/rpc/Invocation.java | 6 ++++-- .../java/com/alibaba/dubbo/rpc/RpcInvocation.java | 8 +++++--- .../dubbo/registry/client/ServiceInstance.java | 1 + .../main/java/org/apache/dubbo/rpc/Invocation.java | 12 +++++++----- 8 files changed, 25 insertions(+), 10 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java index e659b10b6f..058f1d1622 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java @@ -21,6 +21,8 @@ import org.apache.dubbo.config.support.Parameter; import org.apache.dubbo.rpc.model.ModuleModel; import org.apache.dubbo.rpc.support.ProtocolUtils; +import java.beans.Transient; + import static org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY; import static org.apache.dubbo.common.constants.CommonConstants.REFERENCE_FILTER_KEY; import static org.apache.dubbo.common.constants.CommonConstants.REFER_ASYNC_KEY; @@ -184,6 +186,7 @@ public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig { } @Override + @Transient protected boolean isNeedCheckMethod() { return StringUtils.isEmpty(getGeneric()); } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ModuleConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ModuleConfig.java index 511c6bbfb7..ef6eaf870d 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ModuleConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ModuleConfig.java @@ -22,6 +22,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.ModuleModel; import org.apache.dubbo.rpc.model.ScopeModel; +import java.beans.Transient; import java.util.ArrayList; import java.util.List; @@ -135,11 +136,13 @@ public class ModuleConfig extends AbstractConfig { } @Override + @Transient public ModuleModel getScopeModel() { return (ModuleModel) super.getScopeModel(); } @Override + @Transient protected ScopeModel getDefaultModel() { return ApplicationModel.defaultModel().getDefaultModule(); } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java index bfeacacba5..4b41ea2786 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java @@ -150,6 +150,7 @@ public abstract class ReferenceConfigBase extends AbstractReferenceConfig { } @Override + @Transient public Map getMetaData() { return getMetaData(null); } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java index 0db03d0208..265779ed3f 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java @@ -180,6 +180,7 @@ public abstract class ServiceConfigBase extends AbstractServiceConfig { } @Override + @Transient public Map getMetaData() { return getMetaData(null); } diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/Invocation.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/Invocation.java index 2eda40f495..85e5cfcfe5 100644 --- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/Invocation.java +++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/Invocation.java @@ -17,14 +17,15 @@ package com.alibaba.dubbo.rpc; +import org.apache.dubbo.rpc.model.ServiceModel; + +import java.beans.Transient; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Consumer; -import org.apache.dubbo.rpc.model.ServiceModel; - @Deprecated public interface Invocation extends org.apache.dubbo.rpc.Invocation { @@ -184,6 +185,7 @@ public interface Invocation extends org.apache.dubbo.rpc.Invocation { } @Override + @Transient public Invoker getInvoker() { return new Invoker.CompatibleInvoker(delegate.getInvoker()); } diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java index 9035294927..d1cf40600d 100644 --- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java +++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java @@ -17,6 +17,10 @@ package com.alibaba.dubbo.rpc; +import com.alibaba.dubbo.common.Constants; +import com.alibaba.dubbo.common.URL; + +import java.beans.Transient; import java.io.Serializable; import java.lang.reflect.Method; import java.util.Arrays; @@ -24,9 +28,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.alibaba.dubbo.common.Constants; -import com.alibaba.dubbo.common.URL; - public class RpcInvocation implements Invocation, Serializable { private static final long serialVersionUID = -4355285085441097045L; @@ -101,6 +102,7 @@ public class RpcInvocation implements Invocation, Serializable { this.invoker = invoker; } + @Transient public Invoker getInvoker() { return invoker; } diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java index f1546815f8..9f9aaaa860 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java @@ -103,6 +103,7 @@ public interface ServiceInstance extends Serializable { void setApplicationModel(ApplicationModel applicationModel); + @Transient ApplicationModel getApplicationModel(); @Transient diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java index 1cb4177a90..b40fa05e8a 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java @@ -16,16 +16,17 @@ */ package org.apache.dubbo.rpc; -import java.util.List; -import java.util.Map; -import java.util.function.Consumer; -import java.util.stream.Stream; - import org.apache.dubbo.common.Experimental; import org.apache.dubbo.rpc.model.ModuleModel; import org.apache.dubbo.rpc.model.ScopeModelUtil; import org.apache.dubbo.rpc.model.ServiceModel; +import java.beans.Transient; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.stream.Stream; + /** * Invocation. (API, Prototype, NonThreadSafe) * @@ -148,6 +149,7 @@ public interface Invocation { * @return invoker. * @transient */ + @Transient Invoker getInvoker(); void setServiceModel(ServiceModel serviceModel); From ea35f7ed5c1d6d2a6ede821f1481eb5088254d28 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Tue, 20 Jun 2023 10:02:30 +0800 Subject: [PATCH 14/21] Revert "refactor: migrate tracing core from boot-start to dubbo deployer (#12453)" This reverts commit a613cae2 --- .artifacts | 1 - dubbo-cluster/pom.xml | 5 + .../support}/ObservationSenderFilter.java | 23 +- ...che.dubbo.rpc.cluster.filter.ClusterFilter | 1 + .../filter/AbstractObservationFilterTest.java | 84 +++++++ .../filter/ObservationSenderFilterTest.java | 7 +- .../common/constants/LoggerCodeConstants.java | 2 - .../dubbo/config/nested/BaggageConfig.java | 25 --- .../dubbo/config/nested/ExporterConfig.java | 37 +-- .../config/nested/PropagationConfig.java | 7 - .../dubbo/config/nested/SamplingConfig.java | 7 - dubbo-config/dubbo-config-api/pom.xml | 6 - .../deploy/DefaultApplicationDeployer.java | 117 +++++----- .../DefaultApplicationDeployerTest.java | 6 +- dubbo-dependencies-bom/pom.xml | 17 +- dubbo-distribution/dubbo-all/pom.xml | 10 - dubbo-distribution/dubbo-bom/pom.xml | 7 - dubbo-distribution/dubbo-core-spi/pom.xml | 1 - dubbo-metrics/dubbo-metrics-api/pom.xml | 5 + .../apache/dubbo/metrics/aggregate/Pane.java | 0 .../metrics/aggregate/SlidingWindow.java | 0 ...ractDefaultDubboObservationConvention.java | 16 +- ...faultDubboClientObservationConvention.java | 7 +- ...faultDubboServerObservationConvention.java | 4 +- .../observation}/DubboClientContext.java | 9 +- .../DubboClientObservationConvention.java | 4 +- .../DubboObservationDocumentation.java | 2 +- .../observation}/DubboServerContext.java | 5 +- .../DubboServerObservationConvention.java | 4 +- .../metrics/utils/MetricsSupportUtil.java | 38 ---- .../aggregate/TimeWindowAggregatorTest.java | 3 +- ...tDubboClientObservationConventionTest.java | 5 +- ...tDubboServerObservationConventionTest.java | 6 +- .../utils/ObservationConventionUtils.java | 2 +- dubbo-metrics/dubbo-metrics-default/pom.xml | 5 + .../ObservationReceiverFilter.java | 19 +- .../internal/org.apache.dubbo.rpc.Filter | 2 + .../AbstractObservationFilterTest.java | 5 +- .../metrics/observation}/MockInvocation.java | 6 +- .../ObservationReceiverFilterTest.java | 12 +- dubbo-metrics/dubbo-tracing/pom.xml | 111 --------- .../tracing/DubboObservationRegistry.java | 90 -------- .../dubbo/tracing/exporter/TraceExporter.java | 37 --- .../exporter/TraceExporterFactory.java | 66 ------ .../tracing/exporter/otlp/OTlpExporter.java | 66 ------ .../exporter/zipkin/ZipkinExporter.java | 60 ----- .../tracing/tracer/PropagatorProvider.java | 29 --- .../tracer/PropagatorProviderFactory.java | 37 --- .../dubbo/tracing/tracer/TracerProvider.java | 30 --- .../tracing/tracer/TracerProviderFactory.java | 39 ---- .../tracer/brave/BravePropagatorProvider.java | 31 --- .../tracing/tracer/brave/BraveProvider.java | 41 ---- .../tracer/otel/OTelPropagatorProvider.java | 38 ---- .../tracer/otel/OpenTelemetryProvider.java | 212 ------------------ .../tracing/utils/ObservationSupportUtil.java | 49 ---- .../internal/org.apache.dubbo.rpc.Filter | 1 - ...che.dubbo.rpc.cluster.filter.ClusterFilter | 1 - .../tracer/PropagatorProviderFactoryTest.java | 34 --- .../otel/OTelPropagatorProviderTest.java | 39 ---- .../otel/OpenTelemetryProviderTest.java | 53 ----- .../utils/ObservationSupportUtilTest.java | 49 ---- dubbo-metrics/pom.xml | 1 - .../observability/autoconfigure/pom.xml | 6 - .../DubboObservationAutoConfiguration.java | 19 +- .../brave/BraveAutoConfiguration.java | 18 +- .../otel/OpenTelemetryAutoConfiguration.java | 17 +- dubbo-test/dubbo-dependencies-all/pom.xml | 6 +- 67 files changed, 250 insertions(+), 1452 deletions(-) rename {dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter => dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support}/ObservationSenderFilter.java (78%) create mode 100644 dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/AbstractObservationFilterTest.java rename {dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster}/filter/ObservationSenderFilterTest.java (92%) mode change 100644 => 100755 dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/Pane.java mode change 100644 => 100755 dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/SlidingWindow.java rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/AbstractDefaultDubboObservationConvention.java (87%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DefaultDubboClientObservationConvention.java (92%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DefaultDubboServerObservationConvention.java (94%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboClientContext.java (97%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboClientObservationConvention.java (92%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboObservationDocumentation.java (98%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboServerContext.java (97%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboServerObservationConvention.java (92%) delete mode 100644 dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation}/DefaultDubboClientObservationConventionTest.java (94%) rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation}/DefaultDubboServerObservationConventionTest.java (93%) rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation}/utils/ObservationConventionUtils.java (97%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter => dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/observation}/ObservationReceiverFilter.java (80%) create mode 100644 dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter => dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation}/AbstractObservationFilterTest.java (94%) rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation}/MockInvocation.java (97%) rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter => dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation}/ObservationReceiverFilterTest.java (99%) delete mode 100644 dubbo-metrics/dubbo-tracing/pom.xml delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporter.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporterFactory.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/otlp/OTlpExporter.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/zipkin/ZipkinExporter.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactory.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProviderFactory.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BravePropagatorProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BraveProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/utils/ObservationSupportUtil.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter delete mode 100644 dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactoryTest.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProviderTest.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProviderTest.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationSupportUtilTest.java diff --git a/.artifacts b/.artifacts index e18fed5eb5..539c51deed 100644 --- a/.artifacts +++ b/.artifacts @@ -114,5 +114,4 @@ dubbo-nacos-spring-boot-starter dubbo-zookeeper-spring-boot-starter dubbo-zookeeper-curator5-spring-boot-starter dubbo-spring-security -dubbo-tracing dubbo-xds diff --git a/dubbo-cluster/pom.xml b/dubbo-cluster/pom.xml index 08b83b8cca..130b7e3f7e 100644 --- a/dubbo-cluster/pom.xml +++ b/dubbo-cluster/pom.xml @@ -86,5 +86,10 @@ ${project.parent.version} true + + io.micrometer + micrometer-tracing-integration-test + test + diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ObservationSenderFilter.java similarity index 78% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java rename to dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ObservationSenderFilter.java index bce47b7b9a..233a5ed35b 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ObservationSenderFilter.java @@ -14,9 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.rpc.cluster.filter.support; import org.apache.dubbo.common.extension.Activate; +import org.apache.dubbo.metrics.observation.DefaultDubboClientObservationConvention; +import org.apache.dubbo.metrics.observation.DubboClientContext; +import org.apache.dubbo.metrics.observation.DubboClientObservationConvention; +import org.apache.dubbo.metrics.observation.DubboObservationDocumentation; import org.apache.dubbo.rpc.BaseFilter; import org.apache.dubbo.rpc.Filter; import org.apache.dubbo.rpc.Invocation; @@ -26,10 +30,6 @@ import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.cluster.filter.ClusterFilter; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.ScopeModelAware; -import org.apache.dubbo.tracing.DefaultDubboClientObservationConvention; -import org.apache.dubbo.tracing.DubboClientObservationConvention; -import org.apache.dubbo.tracing.DubboObservationDocumentation; -import org.apache.dubbo.tracing.context.DubboClientContext; import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationRegistry; @@ -39,7 +39,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER; /** * A {@link Filter} that creates an {@link Observation} around the outgoing message. */ -@Activate(group = CONSUMER, order = Integer.MIN_VALUE + 50, onClass = "io.micrometer.observation.NoopObservationRegistry") +@Activate(group = CONSUMER, order = -1, onClass = "io.micrometer.observation.NoopObservationRegistry") public class ObservationSenderFilter implements ClusterFilter, BaseFilter.Listener, ScopeModelAware { private ObservationRegistry observationRegistry; @@ -47,8 +47,12 @@ public class ObservationSenderFilter implements ClusterFilter, BaseFilter.Listen private DubboClientObservationConvention clientObservationConvention; public ObservationSenderFilter(ApplicationModel applicationModel) { - observationRegistry = applicationModel.getBeanFactory().getBean(ObservationRegistry.class); - clientObservationConvention = applicationModel.getBeanFactory().getBean(DubboClientObservationConvention.class); + applicationModel.getApplicationConfigManager().getTracing().ifPresent(cfg -> { + if (Boolean.TRUE.equals(cfg.getEnabled())) { + observationRegistry = applicationModel.getBeanFactory().getBean(ObservationRegistry.class); + clientObservationConvention = applicationModel.getBeanFactory().getBean(DubboClientObservationConvention.class); + } + }); } @Override @@ -71,9 +75,6 @@ public class ObservationSenderFilter implements ClusterFilter, BaseFilter.Listen if (observation == null) { return; } - if (appResponse != null && appResponse.hasException()) { - observation.error(appResponse.getException()); - } observation.stop(); } diff --git a/dubbo-cluster/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter b/dubbo-cluster/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter index 28a9e73853..cd0a2f44e8 100644 --- a/dubbo-cluster/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter +++ b/dubbo-cluster/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter @@ -1,4 +1,5 @@ consumercontext=org.apache.dubbo.rpc.cluster.filter.support.ConsumerContextFilter consumer-classloader=org.apache.dubbo.rpc.cluster.filter.support.ConsumerClassLoaderFilter router-snapshot=org.apache.dubbo.rpc.cluster.router.RouterSnapshotFilter +observationsender=org.apache.dubbo.rpc.cluster.filter.support.ObservationSenderFilter metricsClusterFilter=org.apache.dubbo.rpc.cluster.filter.support.MetricsClusterFilter \ No newline at end of file diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/AbstractObservationFilterTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/AbstractObservationFilterTest.java new file mode 100644 index 0000000000..567e9cab3b --- /dev/null +++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/AbstractObservationFilterTest.java @@ -0,0 +1,84 @@ +/* + * 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.rpc.cluster.filter; + +import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.config.TracingConfig; +import org.apache.dubbo.rpc.AppResponse; +import org.apache.dubbo.rpc.BaseFilter; +import org.apache.dubbo.rpc.Invoker; +import org.apache.dubbo.rpc.RpcInvocation; +import org.apache.dubbo.rpc.model.ApplicationModel; + +import io.micrometer.tracing.test.SampleTestRunner; +import org.junit.jupiter.api.AfterEach; + +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +abstract class AbstractObservationFilterTest extends SampleTestRunner { + + ApplicationModel applicationModel; + RpcInvocation invocation; + + BaseFilter filter; + + Invoker invoker = mock(Invoker.class); + + static final String INTERFACE_NAME = "org.apache.dubbo.MockInterface"; + static final String METHOD_NAME = "mockMethod"; + static final String GROUP = "mockGroup"; + static final String VERSION = "1.0.0"; + + @AfterEach + public void teardown() { + if (applicationModel != null) { + applicationModel.destroy(); + } + } + + abstract BaseFilter createFilter(ApplicationModel applicationModel); + + void setupConfig() { + ApplicationConfig config = new ApplicationConfig(); + config.setName("MockObservations"); + + applicationModel = ApplicationModel.defaultModel(); + applicationModel.getApplicationConfigManager().setApplication(config); + + invocation = new RpcInvocation(new MockInvocation()); + invocation.addInvokedInvoker(invoker); + + applicationModel.getBeanFactory().registerBean(getObservationRegistry()); + TracingConfig tracingConfig = new TracingConfig(); + tracingConfig.setEnabled(true); + applicationModel.getApplicationConfigManager().setTracing(tracingConfig); + + filter = createFilter(applicationModel); + + given(invoker.invoke(invocation)).willReturn(new AppResponse("success")); + + initParam(); + } + + private void initParam() { + invocation.setTargetServiceUniqueName(GROUP + "/" + INTERFACE_NAME + ":" + VERSION); + invocation.setMethodName(METHOD_NAME); + invocation.setParameterTypes(new Class[] {String.class}); + } + +} diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationSenderFilterTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/ObservationSenderFilterTest.java similarity index 92% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationSenderFilterTest.java rename to dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/ObservationSenderFilterTest.java index 071bc0e978..1315686740 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationSenderFilterTest.java +++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/ObservationSenderFilterTest.java @@ -15,22 +15,23 @@ * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.rpc.cluster.filter; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.RpcContext; -import org.apache.dubbo.rpc.cluster.filter.ClusterFilter; +import org.apache.dubbo.rpc.cluster.filter.support.ObservationSenderFilter; import org.apache.dubbo.rpc.model.ApplicationModel; import io.micrometer.common.KeyValues; import io.micrometer.core.tck.MeterRegistryAssert; +import io.micrometer.tracing.test.SampleTestRunner; import io.micrometer.tracing.test.simple.SpansAssert; import org.assertj.core.api.BDDAssertions; class ObservationSenderFilterTest extends AbstractObservationFilterTest { @Override - public SampleTestRunnerConsumer yourCode() { + public SampleTestRunner.SampleTestRunnerConsumer yourCode() { return (buildingBlocks, meterRegistry) -> { setupConfig(); setupAttachments(); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java index 83e7b62dfa..0a3bfa2125 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java @@ -92,8 +92,6 @@ public interface LoggerCodeConstants { String VULNERABILITY_WARNING = "0-28"; - String COMMON_NOT_FOUND_TRACER_DEPENDENCY = "0-29"; - // Registry module diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/BaggageConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/BaggageConfig.java index b39f0ece30..beba9b5ddd 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/BaggageConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/BaggageConfig.java @@ -39,19 +39,6 @@ public class BaggageConfig implements Serializable { */ private List remoteFields = new ArrayList<>(); - public BaggageConfig() { - } - - public BaggageConfig(Boolean enabled) { - this.enabled = enabled; - } - - public BaggageConfig(Boolean enabled, Correlation correlation, List remoteFields) { - this.enabled = enabled; - this.correlation = correlation; - this.remoteFields = remoteFields; - } - public Boolean getEnabled() { return enabled; } @@ -89,18 +76,6 @@ public class BaggageConfig implements Serializable { */ private List fields = new ArrayList<>(); - public Correlation() { - } - - public Correlation(boolean enabled) { - this.enabled = enabled; - } - - public Correlation(boolean enabled, List fields) { - this.enabled = enabled; - this.fields = fields; - } - public boolean isEnabled() { return this.enabled; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ExporterConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ExporterConfig.java index 871a5afbab..58de4dcd80 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ExporterConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ExporterConfig.java @@ -56,28 +56,15 @@ public class ExporterConfig implements Serializable { private String endpoint; /** - * Connection timeout for requests to Zipkin. (seconds) + * Connection timeout for requests to Zipkin. */ private Duration connectTimeout = Duration.ofSeconds(1); /** - * Read timeout for requests to Zipkin. (seconds) + * Read timeout for requests to Zipkin. */ private Duration readTimeout = Duration.ofSeconds(10); - public ZipkinConfig() { - } - - public ZipkinConfig(String endpoint) { - this.endpoint = endpoint; - } - - public ZipkinConfig(String endpoint, Duration connectTimeout, Duration readTimeout) { - this.endpoint = endpoint; - this.connectTimeout = connectTimeout; - this.readTimeout = readTimeout; - } - public String getEndpoint() { return endpoint; } @@ -111,7 +98,7 @@ public class ExporterConfig implements Serializable { private String endpoint; /** - * The maximum time to wait for the collector to process an exported batch of spans. (seconds) + * The maximum time to wait for the collector to process an exported batch of spans. */ private Duration timeout = Duration.ofSeconds(10); @@ -123,24 +110,6 @@ public class ExporterConfig implements Serializable { private Map headers = new HashMap<>(); - public OtlpConfig() { - } - - public OtlpConfig(String endpoint) { - this.endpoint = endpoint; - } - - public OtlpConfig(String endpoint, Duration timeout) { - this.endpoint = endpoint; - this.timeout = timeout; - } - - public OtlpConfig(String endpoint, Duration timeout, String compressionMethod) { - this.endpoint = endpoint; - this.timeout = timeout; - this.compressionMethod = compressionMethod; - } - public String getEndpoint() { return endpoint; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/PropagationConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/PropagationConfig.java index c574bd0e6d..8e52353323 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/PropagationConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/PropagationConfig.java @@ -29,13 +29,6 @@ public class PropagationConfig implements Serializable { */ private String type = W3C; - public PropagationConfig() { - } - - public PropagationConfig(String type) { - this.type = type; - } - public String getType() { return type; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/SamplingConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/SamplingConfig.java index 0e98a98b5f..a605527190 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/SamplingConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/SamplingConfig.java @@ -25,13 +25,6 @@ public class SamplingConfig implements Serializable { */ private float probability = 0.10f; - public SamplingConfig() { - } - - public SamplingConfig(float probability) { - this.probability = probability; - } - public float getProbability() { return this.probability; } diff --git a/dubbo-config/dubbo-config-api/pom.xml b/dubbo-config/dubbo-config-api/pom.xml index 7bd4234ebd..fec3459350 100644 --- a/dubbo-config/dubbo-config-api/pom.xml +++ b/dubbo-config/dubbo-config-api/pom.xml @@ -72,12 +72,6 @@ ${project.parent.version} - - org.apache.dubbo - dubbo-tracing - ${project.parent.version} - - org.apache.dubbo dubbo-monitor-api diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java index 6302ee6eb3..ac012ee3d5 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java @@ -38,6 +38,7 @@ import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.common.threadpool.manager.ExecutorRepository; import org.apache.dubbo.common.threadpool.manager.FrameworkExecutorRepository; import org.apache.dubbo.common.utils.ArrayUtils; +import org.apache.dubbo.common.utils.ClassUtils; import org.apache.dubbo.common.utils.CollectionUtils; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.ApplicationConfig; @@ -46,7 +47,6 @@ import org.apache.dubbo.config.DubboShutdownHook; import org.apache.dubbo.config.MetadataReportConfig; import org.apache.dubbo.config.MetricsConfig; import org.apache.dubbo.config.RegistryConfig; -import org.apache.dubbo.config.TracingConfig; import org.apache.dubbo.config.context.ConfigManager; import org.apache.dubbo.config.utils.CompositeReferenceCache; import org.apache.dubbo.config.utils.ConfigValidationUtils; @@ -60,7 +60,6 @@ import org.apache.dubbo.metrics.report.DefaultMetricsReporterFactory; import org.apache.dubbo.metrics.report.MetricsReporter; import org.apache.dubbo.metrics.report.MetricsReporterFactory; import org.apache.dubbo.metrics.service.MetricsServiceExporter; -import org.apache.dubbo.metrics.utils.MetricsSupportUtil; import org.apache.dubbo.registry.Registry; import org.apache.dubbo.registry.RegistryFactory; import org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils; @@ -71,8 +70,6 @@ import org.apache.dubbo.rpc.model.ModuleServiceRepository; import org.apache.dubbo.rpc.model.ProviderModel; import org.apache.dubbo.rpc.model.ScopeModel; import org.apache.dubbo.rpc.model.ScopeModelUtil; -import org.apache.dubbo.tracing.DubboObservationRegistry; -import org.apache.dubbo.tracing.utils.ObservationSupportUtil; import java.io.IOException; import java.util.ArrayList; @@ -155,7 +152,7 @@ public class DefaultApplicationDeployer extends AbstractDeployer deployListeners = applicationModel.getExtensionLoader(ApplicationDeployListener.class) - .getSupportedExtensionInstances(); + .getSupportedExtensionInstances(); for (ApplicationDeployListener listener : deployListeners) { this.addDeployListener(listener); } @@ -229,9 +226,6 @@ public class DefaultApplicationDeployer extends AbstractDeployer defaultRegistries = configManager.getDefaultRegistries(); if (defaultRegistries.size() > 0) { defaultRegistries - .stream() - .filter(this::isUsedRegistryAsConfigCenter) - .map(this::registryAsConfigCenter) - .forEach(configCenter -> { - if (configManager.getConfigCenter(configCenter.getId()).isPresent()) { - return; - } - configManager.addConfigCenter(configCenter); - logger.info("use registry as config-center: " + configCenter); + .stream() + .filter(this::isUsedRegistryAsConfigCenter) + .map(this::registryAsConfigCenter) + .forEach(configCenter -> { + if (configManager.getConfigCenter(configCenter.getId()).isPresent()) { + return; + } + configManager.addConfigCenter(configCenter); + logger.info("use registry as config-center: " + configCenter); - }); + }); } } @@ -378,16 +372,16 @@ public class DefaultApplicationDeployer extends AbstractDeployer configOptional = configManager.getMetrics(); //If no specific metrics type is configured and there is no Prometheus dependency in the dependencies. MetricsConfig metricsConfig = configOptional.orElse(new MetricsConfig(applicationModel)); if (StringUtils.isBlank(metricsConfig.getProtocol())) { - metricsConfig.setProtocol(MetricsSupportUtil.isSupportPrometheus() ? PROTOCOL_PROMETHEUS : PROTOCOL_DEFAULT); + metricsConfig.setProtocol(isSupportPrometheus() ? PROTOCOL_PROMETHEUS : PROTOCOL_DEFAULT); } collector.setCollectEnabled(true); collector.collectApplication(); @@ -415,35 +409,26 @@ public class DefaultApplicationDeployer extends AbstractDeployer 1.10.0"); - } - return; - } - if (!ObservationSupportUtil.isSupportTracing()) { - if (logger.isDebugEnabled()) { - logger.debug("Not found micrometer-tracing dependency, skip init ObservationRegistry."); - } - return; - } - Optional configOptional = configManager.getTracing(); - if (!configOptional.isPresent() || !configOptional.get().getEnabled()) { - return; - } + public boolean isSupportMetrics() { + return isClassPresent("io.micrometer.core.instrument.MeterRegistry"); + } - DubboObservationRegistry dubboObservationRegistry = new DubboObservationRegistry(applicationModel, configOptional.get()); - dubboObservationRegistry.initObservationRegistry(); + public static boolean isSupportPrometheus() { + return isClassPresent("io.micrometer.prometheus.PrometheusConfig") + && isClassPresent("io.prometheus.client.exporter.BasicAuthHttpConnectionFactory") + && isClassPresent("io.prometheus.client.exporter.HttpConnectionFactory") + && isClassPresent("io.prometheus.client.exporter.PushGateway"); + } + + + private static boolean isClassPresent(String className) { + return ClassUtils.isPresent(className, DefaultApplicationDeployer.class.getClassLoader()); } private boolean isUsedRegistryAsConfigCenter(RegistryConfig registryConfig) { return isUsedRegistryAsCenter(registryConfig, registryConfig::getUseAsConfigCenter, "config", - DynamicConfigurationFactory.class); + DynamicConfigurationFactory.class); } private ConfigCenterConfig registryAsConfigCenter(RegistryConfig registryConfig) { @@ -485,9 +470,9 @@ public class DefaultApplicationDeployer extends AbstractDeployer metadataConfigsToOverride = originMetadataConfigs - .stream() - .filter(m -> Objects.isNull(m.getAddress())) - .collect(Collectors.toList()); + .stream() + .filter(m -> Objects.isNull(m.getAddress())) + .collect(Collectors.toList()); if (metadataConfigsToOverride.size() > 1) { return; @@ -498,12 +483,12 @@ public class DefaultApplicationDeployer extends AbstractDeployer defaultRegistries = configManager.getDefaultRegistries(); if (!defaultRegistries.isEmpty()) { defaultRegistries - .stream() - .filter(this::isUsedRegistryAsMetadataCenter) - .map(registryConfig -> registryAsMetadataCenter(registryConfig, metadataConfigToOverride)) - .forEach(metadataReportConfig -> { - overrideMetadataReportConfig(metadataConfigToOverride, metadataReportConfig); - }); + .stream() + .filter(this::isUsedRegistryAsMetadataCenter) + .map(registryConfig -> registryAsMetadataCenter(registryConfig, metadataConfigToOverride)) + .forEach(metadataReportConfig -> { + overrideMetadataReportConfig(metadataConfigToOverride, metadataReportConfig); + }); } } @@ -532,7 +517,7 @@ public class DefaultApplicationDeployer extends AbstractDeployer { - ServiceInstanceMetadataUtils.registerMetadataAndInstance(applicationModel); - return null; - } + () -> { + ServiceInstanceMetadataUtils.registerMetadataAndInstance(applicationModel); + return null; + } ); } catch (Exception e) { logger.error(CONFIG_REGISTER_INSTANCE_ERROR, "configuration server disconnected", "", "Register instance error.", e); @@ -1032,7 +1017,7 @@ public class DefaultApplicationDeployer extends AbstractDeployer1.8.0 0.1.35 1.11.1 - 1.26.0 - 2.16.4 + 1.1.2 3.3 0.16.0 @@ -232,20 +231,6 @@ pom import - - io.opentelemetry - opentelemetry-bom - ${opentelemetry.version} - pom - import - - - io.zipkin.reporter2 - zipkin-reporter-bom - ${zipkin-reporter.version} - pom - import - io.netty netty-all diff --git a/dubbo-distribution/dubbo-all/pom.xml b/dubbo-distribution/dubbo-all/pom.xml index 76fc002d1c..3951a9fd9d 100644 --- a/dubbo-distribution/dubbo-all/pom.xml +++ b/dubbo-distribution/dubbo-all/pom.xml @@ -219,15 +219,6 @@ true - - - org.apache.dubbo - dubbo-tracing - ${project.version} - compile - true - - org.apache.dubbo @@ -539,7 +530,6 @@ org.apache.dubbo:dubbo-metrics-metadata org.apache.dubbo:dubbo-metrics-config-center org.apache.dubbo:dubbo-metrics-prometheus - org.apache.dubbo:dubbo-tracing org.apache.dubbo:dubbo-monitor-api org.apache.dubbo:dubbo-monitor-default org.apache.dubbo:dubbo-qos diff --git a/dubbo-distribution/dubbo-bom/pom.xml b/dubbo-distribution/dubbo-bom/pom.xml index dac1366414..2d163f10e8 100644 --- a/dubbo-distribution/dubbo-bom/pom.xml +++ b/dubbo-distribution/dubbo-bom/pom.xml @@ -256,13 +256,6 @@ ${project.version} - - - org.apache.dubbo - dubbo-tracing - ${project.version} - - org.apache.dubbo diff --git a/dubbo-distribution/dubbo-core-spi/pom.xml b/dubbo-distribution/dubbo-core-spi/pom.xml index 2a441485f8..88939753e9 100644 --- a/dubbo-distribution/dubbo-core-spi/pom.xml +++ b/dubbo-distribution/dubbo-core-spi/pom.xml @@ -134,7 +134,6 @@ org.apache.dubbo:dubbo-metadata-api org.apache.dubbo:dubbo-metrics-api org.apache.dubbo:dubbo-metrics-default - org.apache.dubbo:dubbo-tracing org.apache.dubbo:dubbo-monitor-api org.apache.dubbo:dubbo-registry-api org.apache.dubbo:dubbo-remoting-api diff --git a/dubbo-metrics/dubbo-metrics-api/pom.xml b/dubbo-metrics/dubbo-metrics-api/pom.xml index 3c31ae389c..a35c238395 100644 --- a/dubbo-metrics/dubbo-metrics-api/pom.xml +++ b/dubbo-metrics/dubbo-metrics-api/pom.xml @@ -49,5 +49,10 @@ com.tdunning t-digest + + io.micrometer + micrometer-tracing-integration-test + test + diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/Pane.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/Pane.java old mode 100644 new mode 100755 diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/SlidingWindow.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/SlidingWindow.java old mode 100644 new mode 100755 diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/AbstractDefaultDubboObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/AbstractDefaultDubboObservationConvention.java similarity index 87% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/AbstractDefaultDubboObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/AbstractDefaultDubboObservationConvention.java index a688a4c826..410af9d674 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/AbstractDefaultDubboObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/AbstractDefaultDubboObservationConvention.java @@ -14,20 +14,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; - -import io.micrometer.common.KeyValues; -import io.micrometer.common.docs.KeyName; -import io.micrometer.common.lang.Nullable; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.support.RpcUtils; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_METHOD; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_SERVICE; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_SYSTEM; +import io.micrometer.common.KeyValues; +import io.micrometer.common.docs.KeyName; +import io.micrometer.common.lang.Nullable; + +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_METHOD; +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_SERVICE; +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_SYSTEM; class AbstractDefaultDubboObservationConvention { KeyValues getLowCardinalityKeyValues(Invocation invocation) { diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConvention.java similarity index 92% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConvention.java index 481861d1f9..91e88da2a3 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConvention.java @@ -14,20 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcContextAttachment; -import org.apache.dubbo.tracing.context.DubboClientContext; import io.micrometer.common.KeyValues; import java.util.List; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.NET_PEER_NAME; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.NET_PEER_PORT; +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.NET_PEER_NAME; +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.NET_PEER_PORT; /** * Default implementation of the {@link DubboClientObservationConvention}. diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConvention.java similarity index 94% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConvention.java index c78be59806..adcebdbdac 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConvention.java @@ -14,9 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; - -import org.apache.dubbo.tracing.context.DubboServerContext; +package org.apache.dubbo.metrics.observation; import io.micrometer.common.KeyValues; diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientContext.java similarity index 97% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientContext.java index f1998bc91a..910d6f74c0 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientContext.java @@ -14,14 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.context; +package org.apache.dubbo.metrics.observation; -import java.util.Objects; - -import io.micrometer.observation.transport.SenderContext; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; +import io.micrometer.observation.transport.SenderContext; + +import java.util.Objects; + /** * Provider context for RPC. */ diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboClientObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientObservationConvention.java similarity index 92% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboClientObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientObservationConvention.java index 5bd74dec50..d33164294d 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboClientObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientObservationConvention.java @@ -14,9 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; - -import org.apache.dubbo.tracing.context.DubboClientContext; +package org.apache.dubbo.metrics.observation; import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationConvention; diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationDocumentation.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboObservationDocumentation.java similarity index 98% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationDocumentation.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboObservationDocumentation.java index cd0dfe3d61..855a2e01e1 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationDocumentation.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboObservationDocumentation.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; import io.micrometer.common.docs.KeyName; import io.micrometer.common.lang.NonNullApi; diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerContext.java similarity index 97% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerContext.java index 3e5bd13fae..bb1d7005d7 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerContext.java @@ -14,12 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.context; +package org.apache.dubbo.metrics.observation; -import io.micrometer.observation.transport.ReceiverContext; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; +import io.micrometer.observation.transport.ReceiverContext; + /** * Consumer context for RPC. */ diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboServerObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerObservationConvention.java similarity index 92% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboServerObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerObservationConvention.java index 0f7917aded..678226ee7f 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboServerObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerObservationConvention.java @@ -14,9 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; - -import org.apache.dubbo.tracing.context.DubboServerContext; +package org.apache.dubbo.metrics.observation; import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationConvention; diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java deleted file mode 100644 index e0a02f5f04..0000000000 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java +++ /dev/null @@ -1,38 +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.utils; - -import org.apache.dubbo.common.utils.ClassUtils; - -public class MetricsSupportUtil { - - public static boolean isSupportMetrics() { - return isClassPresent("io.micrometer.core.instrument.MeterRegistry"); - } - - public static boolean isSupportPrometheus() { - return isClassPresent("io.micrometer.prometheus.PrometheusConfig") - && isClassPresent("io.prometheus.client.exporter.BasicAuthHttpConnectionFactory") - && isClassPresent("io.prometheus.client.exporter.HttpConnectionFactory") - && isClassPresent("io.prometheus.client.exporter.PushGateway"); - } - - private static boolean isClassPresent(String className) { - return ClassUtils.isPresent(className, MetricsSupportUtil.class.getClassLoader()); - } -} diff --git a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/aggregate/TimeWindowAggregatorTest.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/aggregate/TimeWindowAggregatorTest.java index 2a660a5dd4..e0db96730f 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/aggregate/TimeWindowAggregatorTest.java +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/aggregate/TimeWindowAggregatorTest.java @@ -17,9 +17,8 @@ package org.apache.dubbo.metrics.aggregate; - +import org.junit.Test; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import java.util.concurrent.TimeUnit; diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConventionTest.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConventionTest.java similarity index 94% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConventionTest.java rename to dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConventionTest.java index 0f1e641c4a..ce83f9e886 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConventionTest.java +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConventionTest.java @@ -14,12 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; +import org.apache.dubbo.metrics.observation.utils.ObservationConventionUtils; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcInvocation; -import org.apache.dubbo.tracing.context.DubboClientContext; -import org.apache.dubbo.tracing.utils.ObservationConventionUtils; import io.micrometer.common.KeyValues; import org.junit.jupiter.api.Assertions; diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConventionTest.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConventionTest.java similarity index 93% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConventionTest.java rename to dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConventionTest.java index 95a755cd98..7ca6398c9e 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConventionTest.java +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConventionTest.java @@ -14,13 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; +import org.apache.dubbo.metrics.observation.utils.ObservationConventionUtils; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcInvocation; -import org.apache.dubbo.tracing.context.DubboClientContext; -import org.apache.dubbo.tracing.context.DubboServerContext; -import org.apache.dubbo.tracing.utils.ObservationConventionUtils; import io.micrometer.common.KeyValues; import org.junit.jupiter.api.Assertions; diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationConventionUtils.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/utils/ObservationConventionUtils.java similarity index 97% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationConventionUtils.java rename to dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/utils/ObservationConventionUtils.java index f0b75c8c2c..e6de96f069 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationConventionUtils.java +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/utils/ObservationConventionUtils.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.utils; +package org.apache.dubbo.metrics.observation.utils; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.Invoker; diff --git a/dubbo-metrics/dubbo-metrics-default/pom.xml b/dubbo-metrics/dubbo-metrics-default/pom.xml index 0d2fd8a6bf..71be413c6a 100644 --- a/dubbo-metrics/dubbo-metrics-default/pom.xml +++ b/dubbo-metrics/dubbo-metrics-default/pom.xml @@ -41,5 +41,10 @@ micrometer-test test + + io.micrometer + micrometer-tracing-integration-test + test + diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilter.java similarity index 80% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java rename to dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilter.java index 25b7008c67..5a33ced437 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java +++ b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilter.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.common.extension.Activate; import org.apache.dubbo.rpc.BaseFilter; @@ -25,10 +25,6 @@ import org.apache.dubbo.rpc.Result; import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.ScopeModelAware; -import org.apache.dubbo.tracing.DefaultDubboServerObservationConvention; -import org.apache.dubbo.tracing.DubboObservationDocumentation; -import org.apache.dubbo.tracing.DubboServerObservationConvention; -import org.apache.dubbo.tracing.context.DubboServerContext; import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationRegistry; @@ -38,7 +34,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER; /** * A {@link Filter} that creates an {@link Observation} around the incoming message. */ -@Activate(group = PROVIDER, order = Integer.MIN_VALUE + 50, onClass = "io.micrometer.observation.NoopObservationRegistry") +@Activate(group = PROVIDER, order = -1, onClass = "io.micrometer.observation.NoopObservationRegistry") public class ObservationReceiverFilter implements Filter, BaseFilter.Listener, ScopeModelAware { private ObservationRegistry observationRegistry; @@ -46,8 +42,12 @@ public class ObservationReceiverFilter implements Filter, BaseFilter.Listener, S private DubboServerObservationConvention serverObservationConvention; public ObservationReceiverFilter(ApplicationModel applicationModel) { - observationRegistry = applicationModel.getBeanFactory().getBean(ObservationRegistry.class); - serverObservationConvention = applicationModel.getBeanFactory().getBean(DubboServerObservationConvention.class); + applicationModel.getApplicationConfigManager().getTracing().ifPresent(cfg -> { + if (Boolean.TRUE.equals(cfg.getEnabled())) { + observationRegistry = applicationModel.getBeanFactory().getBean(ObservationRegistry.class); + serverObservationConvention = applicationModel.getBeanFactory().getBean(DubboServerObservationConvention.class); + } + }); } @Override @@ -70,9 +70,6 @@ public class ObservationReceiverFilter implements Filter, BaseFilter.Listener, S if (observation == null) { return; } - if (appResponse != null && appResponse.hasException()) { - observation.error(appResponse.getException()); - } observation.stop(); } diff --git a/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter b/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter new file mode 100644 index 0000000000..5ee6c1d455 --- /dev/null +++ b/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter @@ -0,0 +1,2 @@ +metrics-beta=org.apache.dubbo.metrics.filter.MetricsFilter +observationreceiver=org.apache.dubbo.metrics.observation.ObservationReceiverFilter \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/AbstractObservationFilterTest.java b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/AbstractObservationFilterTest.java similarity index 94% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/AbstractObservationFilterTest.java rename to dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/AbstractObservationFilterTest.java index 046a0f1f95..31715ca94b 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/AbstractObservationFilterTest.java +++ b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/AbstractObservationFilterTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.TracingConfig; @@ -24,7 +24,6 @@ import org.apache.dubbo.rpc.BaseFilter; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcInvocation; import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.MockInvocation; import io.micrometer.tracing.test.SampleTestRunner; import org.junit.jupiter.api.AfterEach; @@ -80,7 +79,7 @@ abstract class AbstractObservationFilterTest extends SampleTestRunner { private void initParam() { invocation.setTargetServiceUniqueName(GROUP + "/" + INTERFACE_NAME + ":" + VERSION); invocation.setMethodName(METHOD_NAME); - invocation.setParameterTypes(new Class[]{String.class}); + invocation.setParameterTypes(new Class[] {String.class}); } } diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/MockInvocation.java b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/MockInvocation.java similarity index 97% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/MockInvocation.java rename to dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/MockInvocation.java index cd9c0335dd..8cb43471d8 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/MockInvocation.java +++ b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/MockInvocation.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.rpc.AttachmentsAdapter; import org.apache.dubbo.rpc.Invoker; @@ -68,11 +68,11 @@ public class MockInvocation extends RpcInvocation { } public Class[] getParameterTypes() { - return new Class[]{String.class}; + return new Class[] {String.class}; } public Object[] getArguments() { - return new Object[]{"aa"}; + return new Object[] {"aa"}; } public Map getAttachments() { diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilterTest.java b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilterTest.java similarity index 99% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilterTest.java rename to dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilterTest.java index 4cb0282430..91101e1aa0 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilterTest.java +++ b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilterTest.java @@ -15,13 +15,8 @@ * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.metrics.observation; -import io.micrometer.common.KeyValues; -import io.micrometer.core.tck.MeterRegistryAssert; -import io.micrometer.tracing.Span; -import io.micrometer.tracing.Tracer; -import io.micrometer.tracing.test.simple.SpansAssert; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.AppResponse; import org.apache.dubbo.rpc.Filter; @@ -32,6 +27,11 @@ import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.model.ApplicationModel; +import io.micrometer.common.KeyValues; +import io.micrometer.core.tck.MeterRegistryAssert; +import io.micrometer.tracing.Span; +import io.micrometer.tracing.Tracer; +import io.micrometer.tracing.test.simple.SpansAssert; import org.assertj.core.api.BDDAssertions; class ObservationReceiverFilterTest extends AbstractObservationFilterTest { diff --git a/dubbo-metrics/dubbo-tracing/pom.xml b/dubbo-metrics/dubbo-tracing/pom.xml deleted file mode 100644 index e50dae23bd..0000000000 --- a/dubbo-metrics/dubbo-tracing/pom.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - 4.0.0 - - org.apache.dubbo - dubbo-metrics - ${revision} - ../pom.xml - - - dubbo-tracing - jar - ${project.artifactId} - The tracing module of dubbo project - - - 11 - 11 - UTF-8 - false - - - - - org.apache.dubbo - dubbo-common - ${project.parent.version} - - - org.apache.dubbo - dubbo-cluster - ${project.parent.version} - - - org.apache.dubbo - dubbo-rpc-api - ${project.parent.version} - - - org.apache.dubbo - dubbo-metrics-default - ${project.parent.version} - - - - - io.micrometer - micrometer-core - - - io.micrometer - micrometer-tracing - - - io.micrometer - micrometer-test - test - - - io.micrometer - micrometer-tracing-integration-test - test - - - - - io.micrometer - micrometer-tracing-bridge-otel - true - - - io.micrometer - micrometer-tracing-bridge-brave - true - - - - - io.opentelemetry - opentelemetry-exporter-zipkin - true - - - io.opentelemetry - opentelemetry-exporter-otlp - true - - - io.zipkin.reporter2 - zipkin-reporter-brave - true - - - \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java deleted file mode 100644 index a8497d998b..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java +++ /dev/null @@ -1,90 +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.tracing; - -import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; -import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.common.utils.JsonUtils; -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.metrics.MetricsGlobalRegistry; -import org.apache.dubbo.metrics.utils.MetricsSupportUtil; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.tracer.PropagatorProvider; -import org.apache.dubbo.tracing.tracer.PropagatorProviderFactory; -import org.apache.dubbo.tracing.tracer.TracerProvider; -import org.apache.dubbo.tracing.tracer.TracerProviderFactory; - -import static org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_NOT_FOUND_TRACER_DEPENDENCY; - -public class DubboObservationRegistry { - - private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(DubboObservationRegistry.class); - - private final ApplicationModel applicationModel; - - private final TracingConfig tracingConfig; - - public DubboObservationRegistry(ApplicationModel applicationModel, TracingConfig tracingConfig) { - this.applicationModel = applicationModel; - this.tracingConfig = tracingConfig; - } - - public void initObservationRegistry() { - // If get ObservationRegistry.class from external(eg Spring.), use external. - io.micrometer.observation.ObservationRegistry externalObservationRegistry = applicationModel.getBeanFactory().getBean(io.micrometer.observation.ObservationRegistry.class); - if (externalObservationRegistry != null) { - if (logger.isDebugEnabled()) { - logger.debug("ObservationRegistry.class from external is existed."); - } - return; - } - - if (logger.isDebugEnabled()) { - logger.debug("Tracing config is: " + JsonUtils.toJson(tracingConfig)); - } - - TracerProvider tracerProvider = TracerProviderFactory.getProvider(applicationModel, tracingConfig); - if (tracerProvider == null) { - logger.warn(COMMON_NOT_FOUND_TRACER_DEPENDENCY, "", "", "Can not found OpenTelemetry/Brave tracer dependencies, skip init ObservationRegistry."); - return; - } - // The real tracer will come from tracer implementation (OTel / Brave) - io.micrometer.tracing.Tracer tracer = tracerProvider.getTracer(); - - // The real propagator will come from tracer implementation (OTel / Brave) - PropagatorProvider propagatorProvider = PropagatorProviderFactory.getPropagatorProvider(); - io.micrometer.tracing.propagation.Propagator propagator = propagatorProvider != null ? propagatorProvider.getPropagator() : io.micrometer.tracing.propagation.Propagator.NOOP; - - io.micrometer.observation.ObservationRegistry registry = io.micrometer.observation.ObservationRegistry.create(); - registry.observationConfig() - // set up a first matching handler that creates spans - it comes from Micrometer Tracing. - // set up spans for sending and receiving data over the wire and a default one. - .observationHandler(new io.micrometer.observation.ObservationHandler.FirstMatchingCompositeObservationHandler( - new io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler<>(tracer, propagator), - new io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler<>(tracer, propagator), - new io.micrometer.tracing.handler.DefaultTracingObservationHandler(tracer))); - - if (MetricsSupportUtil.isSupportMetrics()) { - io.micrometer.core.instrument.MeterRegistry meterRegistry = MetricsGlobalRegistry.getCompositeRegistry(applicationModel); - registry.observationConfig().observationHandler(new io.micrometer.core.instrument.observation.DefaultMeterObservationHandler(meterRegistry)); - } - - applicationModel.getBeanFactory().registerBean(registry); - applicationModel.getBeanFactory().registerBean(tracer); - applicationModel.getBeanFactory().registerBean(propagator); - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporter.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporter.java deleted file mode 100644 index 9b8f12ee4b..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporter.java +++ /dev/null @@ -1,37 +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.tracing.exporter; - -import brave.handler.SpanHandler; -import io.opentelemetry.sdk.trace.export.SpanExporter; - -public interface TraceExporter { - - /** - * for otel - * - * @return - */ - SpanExporter getSpanExporter(); - - /** - * for brave - * - * @return - */ - SpanHandler getSpanHandler(); -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporterFactory.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporterFactory.java deleted file mode 100644 index 7327cf038e..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporterFactory.java +++ /dev/null @@ -1,66 +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.tracing.exporter; - -import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; -import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.common.utils.StringUtils; -import org.apache.dubbo.config.nested.ExporterConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.exporter.otlp.OTlpExporter; -import org.apache.dubbo.tracing.exporter.zipkin.ZipkinExporter; - -import brave.handler.SpanHandler; -import io.opentelemetry.sdk.trace.export.SpanExporter; - -import java.util.ArrayList; -import java.util.List; - -public class TraceExporterFactory { - - private final static ErrorTypeAwareLogger LOGGER = LoggerFactory.getErrorTypeAwareLogger(TraceExporterFactory.class); - - /** - * for OTel - */ - public static List getSpanExporters(ApplicationModel applicationModel, ExporterConfig exporterConfig) { - ExporterConfig.ZipkinConfig zipkinConfig = exporterConfig.getZipkinConfig(); - ExporterConfig.OtlpConfig otlpConfig = exporterConfig.getOtlpConfig(); - List res = new ArrayList<>(); - if (zipkinConfig != null && StringUtils.isNotEmpty(zipkinConfig.getEndpoint())) { - ZipkinExporter zipkinExporter = new ZipkinExporter(applicationModel, zipkinConfig); - LOGGER.info("Create zipkin span exporter."); - res.add(zipkinExporter.getSpanExporter()); - } - if (otlpConfig != null && StringUtils.isNotEmpty(otlpConfig.getEndpoint())) { - OTlpExporter otlpExporter = new OTlpExporter(applicationModel, otlpConfig); - LOGGER.info("Create OTlp span exporter."); - res.add(otlpExporter.getSpanExporter()); - } - - return res; - } - - /** - * for Brave - */ - public static List getSpanHandlers(ApplicationModel applicationModel, ExporterConfig exporterConfig) { - List res = new ArrayList<>(); - // TODO brave SpanHandler impl - return res; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/otlp/OTlpExporter.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/otlp/OTlpExporter.java deleted file mode 100644 index 72da78a795..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/otlp/OTlpExporter.java +++ /dev/null @@ -1,66 +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.tracing.exporter.otlp; - -import org.apache.dubbo.config.nested.ExporterConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.exporter.TraceExporter; - -import brave.handler.SpanHandler; -import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter; -import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter; -import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder; -import io.opentelemetry.sdk.trace.export.SpanExporter; - -import java.util.Map; - -public class OTlpExporter implements TraceExporter { - - private final ApplicationModel applicationModel; - private final ExporterConfig.OtlpConfig otlpConfig; - - public OTlpExporter(ApplicationModel applicationModel, ExporterConfig.OtlpConfig otlpConfig) { - this.applicationModel = applicationModel; - this.otlpConfig = otlpConfig; - } - - @Override - public SpanExporter getSpanExporter() { - OtlpGrpcSpanExporter externalOTlpGrpcSpanExporter = applicationModel.getBeanFactory().getBean(OtlpGrpcSpanExporter.class); - if (externalOTlpGrpcSpanExporter != null) { - return externalOTlpGrpcSpanExporter; - } - OtlpHttpSpanExporter externalOtlpHttpSpanExporter = applicationModel.getBeanFactory().getBean(OtlpHttpSpanExporter.class); - if (externalOtlpHttpSpanExporter != null) { - return externalOtlpHttpSpanExporter; - } - OtlpGrpcSpanExporterBuilder builder = OtlpGrpcSpanExporter.builder() - .setEndpoint(otlpConfig.getEndpoint()) - .setTimeout(otlpConfig.getTimeout()) - .setCompression(otlpConfig.getCompressionMethod()); - for (Map.Entry entry : otlpConfig.getHeaders().entrySet()) { - builder.addHeader(entry.getKey(), entry.getValue()); - } - return builder.build(); - } - - @Override - public SpanHandler getSpanHandler() { - // OTlp is only belong to OTel. - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/zipkin/ZipkinExporter.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/zipkin/ZipkinExporter.java deleted file mode 100644 index c0c00c6fa8..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/zipkin/ZipkinExporter.java +++ /dev/null @@ -1,60 +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.tracing.exporter.zipkin; - -import org.apache.dubbo.config.nested.ExporterConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.exporter.TraceExporter; - -import brave.handler.SpanHandler; -import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter; -import io.opentelemetry.sdk.trace.export.SpanExporter; -import zipkin2.Span; -import zipkin2.codec.BytesEncoder; -import zipkin2.codec.SpanBytesEncoder; - -public class ZipkinExporter implements TraceExporter { - - private final ApplicationModel applicationModel; - private final ExporterConfig.ZipkinConfig zipkinConfig; - - public ZipkinExporter(ApplicationModel applicationModel, ExporterConfig.ZipkinConfig zipkinConfig) { - this.applicationModel = applicationModel; - this.zipkinConfig = zipkinConfig; - } - - @Override - public SpanExporter getSpanExporter() { - BytesEncoder encoder = getSpanBytesEncoder(); - return ZipkinSpanExporter.builder() - .setEncoder(encoder) - .setEndpoint(zipkinConfig.getEndpoint()) - .setReadTimeout(zipkinConfig.getReadTimeout()) - .build(); - } - - @Override - public SpanHandler getSpanHandler() { - // TODO SpanHandler of Brave impl - return null; - } - - private BytesEncoder getSpanBytesEncoder() { - BytesEncoder encoder = applicationModel.getBeanFactory().getBean(BytesEncoder.class); - return encoder == null ? SpanBytesEncoder.JSON_V2 : encoder; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProvider.java deleted file mode 100644 index dc9b58f4e0..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProvider.java +++ /dev/null @@ -1,29 +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.tracing.tracer; - -import io.micrometer.tracing.propagation.Propagator; - -public interface PropagatorProvider { - - /** - * The real propagator will come from tracer implementation (OTel / Brave) - * - * @return Propagator - */ - Propagator getPropagator(); -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactory.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactory.java deleted file mode 100644 index 066cb7ad63..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactory.java +++ /dev/null @@ -1,37 +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.tracing.tracer; - -import org.apache.dubbo.tracing.tracer.brave.BravePropagatorProvider; -import org.apache.dubbo.tracing.tracer.otel.OTelPropagatorProvider; -import org.apache.dubbo.tracing.utils.ObservationSupportUtil; - -public class PropagatorProviderFactory { - - public static PropagatorProvider getPropagatorProvider() { - // If support OTel firstly, return OTel, then Brave. - if (ObservationSupportUtil.isSupportOTelTracer()) { - return new OTelPropagatorProvider(); - } - - if (ObservationSupportUtil.isSupportBraveTracer()) { - return new BravePropagatorProvider(); - } - - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProvider.java deleted file mode 100644 index 05305ada67..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProvider.java +++ /dev/null @@ -1,30 +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.tracing.tracer; - -import io.micrometer.tracing.Tracer; - -public interface TracerProvider { - - /** - * Tracer of Micrometer. The real tracer will come from tracer implementation (OTel / Brave) - * - * @return Tracer - */ - Tracer getTracer(); - -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProviderFactory.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProviderFactory.java deleted file mode 100644 index 7e325809cb..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProviderFactory.java +++ /dev/null @@ -1,39 +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.tracing.tracer; - -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.tracer.brave.BraveProvider; -import org.apache.dubbo.tracing.tracer.otel.OpenTelemetryProvider; -import org.apache.dubbo.tracing.utils.ObservationSupportUtil; - -public class TracerProviderFactory { - - public static TracerProvider getProvider(ApplicationModel applicationModel, TracingConfig tracingConfig) { - // If support OTel firstly, return OTel, then Brave. - if (ObservationSupportUtil.isSupportOTelTracer()) { - return new OpenTelemetryProvider(applicationModel, tracingConfig); - } - - if (ObservationSupportUtil.isSupportBraveTracer()) { - return new BraveProvider(applicationModel, tracingConfig); - } - - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BravePropagatorProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BravePropagatorProvider.java deleted file mode 100644 index 8560a5b149..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BravePropagatorProvider.java +++ /dev/null @@ -1,31 +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.tracing.tracer.brave; - -import org.apache.dubbo.tracing.tracer.PropagatorProvider; - -import io.micrometer.tracing.propagation.Propagator; - - -public class BravePropagatorProvider implements PropagatorProvider { - - @Override - public Propagator getPropagator() { - // TODO impl - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BraveProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BraveProvider.java deleted file mode 100644 index 9ab8172b02..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BraveProvider.java +++ /dev/null @@ -1,41 +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.tracing.tracer.brave; - -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.tracer.TracerProvider; - -import io.micrometer.tracing.Tracer; - - -public class BraveProvider implements TracerProvider { - - private final ApplicationModel applicationModel; - private final TracingConfig tracingConfig; - - public BraveProvider(ApplicationModel applicationModel, TracingConfig tracingConfig) { - this.applicationModel = applicationModel; - this.tracingConfig = tracingConfig; - } - - @Override - public Tracer getTracer() { - // TODO impl - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProvider.java deleted file mode 100644 index 9f537f1e4d..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProvider.java +++ /dev/null @@ -1,38 +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.tracing.tracer.otel; - -import org.apache.dubbo.tracing.tracer.PropagatorProvider; - -import io.micrometer.tracing.otel.bridge.OtelPropagator; -import io.micrometer.tracing.propagation.Propagator; -import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.propagation.ContextPropagators; - -public class OTelPropagatorProvider implements PropagatorProvider { - - private static Propagator propagator; - - @Override - public Propagator getPropagator() { - return propagator; - } - - protected static void createMicrometerPropagator(ContextPropagators contextPropagators, Tracer tracer) { - propagator = new OtelPropagator(contextPropagators, tracer); - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProvider.java deleted file mode 100644 index 36b3c3f191..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProvider.java +++ /dev/null @@ -1,212 +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.tracing.tracer.otel; - -import org.apache.dubbo.common.Version; -import org.apache.dubbo.common.lang.Nullable; -import org.apache.dubbo.config.ApplicationConfig; -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.config.nested.BaggageConfig; -import org.apache.dubbo.config.nested.PropagationConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.exporter.TraceExporterFactory; -import org.apache.dubbo.tracing.tracer.TracerProvider; - -import io.micrometer.tracing.Tracer; -import io.micrometer.tracing.otel.bridge.CompositeSpanExporter; -import io.micrometer.tracing.otel.bridge.EventListener; -import io.micrometer.tracing.otel.bridge.EventPublishingContextWrapper; -import io.micrometer.tracing.otel.bridge.OtelBaggageManager; -import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext; -import io.micrometer.tracing.otel.bridge.OtelTracer; -import io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener; -import io.micrometer.tracing.otel.bridge.Slf4JEventListener; -import io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator; -import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator; -import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; -import io.opentelemetry.context.ContextStorage; -import io.opentelemetry.context.propagation.ContextPropagators; -import io.opentelemetry.context.propagation.TextMapPropagator; -import io.opentelemetry.extension.trace.propagation.B3Propagator; -import io.opentelemetry.sdk.OpenTelemetrySdk; -import io.opentelemetry.sdk.resources.Resource; -import io.opentelemetry.sdk.trace.SdkTracerProvider; -import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; -import io.opentelemetry.sdk.trace.export.SpanExporter; -import io.opentelemetry.sdk.trace.samplers.Sampler; -import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class OpenTelemetryProvider implements TracerProvider { - - private static final String DEFAULT_APPLICATION_NAME = "dubbo-application"; - private final ApplicationModel applicationModel; - private final TracingConfig tracingConfig; - - private OTelEventPublisher publisher; - private OtelCurrentTraceContext otelCurrentTraceContext; - - public OpenTelemetryProvider(ApplicationModel applicationModel, TracingConfig tracingConfig) { - this.applicationModel = applicationModel; - this.tracingConfig = tracingConfig; - } - - @Override - public Tracer getTracer() { - // [OTel component] SpanExporter is a component that gets called when a span is finished. - List spanExporters = TraceExporterFactory.getSpanExporters(applicationModel, tracingConfig.getTracingExporter()); - - String applicationName = applicationModel.getApplicationConfigManager().getApplication() - .map(ApplicationConfig::getName) - .orElse(DEFAULT_APPLICATION_NAME); - - this.publisher = new OTelEventPublisher(getEventListeners()); - - // [Micrometer Tracing component] A Micrometer Tracing wrapper for OTel - this.otelCurrentTraceContext = createCurrentTraceContext(); - - // [OTel component] SdkTracerProvider is an SDK implementation for TracerProvider - SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() - .setSampler(getSampler()) - .setResource(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, applicationName))) - .addSpanProcessor(BatchSpanProcessor - .builder(new CompositeSpanExporter(spanExporters, null, null, null)) - .build()) - .build(); - - ContextPropagators otelContextPropagators = createOtelContextPropagators(); - - // [OTel component] The SDK implementation of OpenTelemetry - OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder() - .setTracerProvider(sdkTracerProvider) - .setPropagators(otelContextPropagators) - .build(); - - // [OTel component] Tracer is a component that handles the life-cycle of a span - io.opentelemetry.api.trace.Tracer otelTracer = openTelemetrySdk.getTracerProvider() - .get("org.apache.dubbo", Version.getVersion()); - - OTelPropagatorProvider.createMicrometerPropagator(otelContextPropagators, otelTracer); - - // [Micrometer Tracing component] A Micrometer Tracing wrapper for OTel's Tracer. - return new OtelTracer(otelTracer, otelCurrentTraceContext, publisher, - new OtelBaggageManager(otelCurrentTraceContext, - tracingConfig.getBaggage().getRemoteFields(), - Collections.emptyList())); - } - - /** - * sampler with probability - * - * @return sampler - */ - private Sampler getSampler() { - Sampler rootSampler = Sampler.traceIdRatioBased(tracingConfig.getSampling().getProbability()); - return Sampler.parentBased(rootSampler); - } - - private List getEventListeners() { - List listeners = new ArrayList<>(); - - // [Micrometer Tracing component] A Micrometer Tracing listener for setting up MDC. - Slf4JEventListener slf4JEventListener = new Slf4JEventListener(); - listeners.add(slf4JEventListener); - - if (tracingConfig.getBaggage().getEnabled()) { - // [Micrometer Tracing component] A Micrometer Tracing listener for setting Baggage in MDC. - // Customizable with correlation fields. - Slf4JBaggageEventListener slf4JBaggageEventListener = new Slf4JBaggageEventListener(tracingConfig.getBaggage().getCorrelation().getFields()); - listeners.add(slf4JBaggageEventListener); - } - - return listeners; - } - - private OtelCurrentTraceContext createCurrentTraceContext() { - ContextStorage.addWrapper(new EventPublishingContextWrapper(publisher)); - return new OtelCurrentTraceContext(); - } - - private ContextPropagators createOtelContextPropagators() { - return ContextPropagators.create( - TextMapPropagator.composite( - PropagatorFactory.getPropagator(tracingConfig.getPropagation(), - tracingConfig.getBaggage(), - otelCurrentTraceContext - ))); - } - - static class OTelEventPublisher implements OtelTracer.EventPublisher { - - private final List listeners; - - OTelEventPublisher(List listeners) { - this.listeners = listeners; - } - - @Override - public void publishEvent(Object event) { - for (EventListener listener : this.listeners) { - listener.onEvent(event); - } - } - } - - static class PropagatorFactory { - - public static TextMapPropagator getPropagator(PropagationConfig propagationConfig, - @Nullable BaggageConfig baggageConfig, - @Nullable OtelCurrentTraceContext currentTraceContext) { - if (baggageConfig == null || !baggageConfig.getEnabled()) { - return getPropagatorWithoutBaggage(propagationConfig); - } - return getPropagatorWithBaggage(propagationConfig, baggageConfig, currentTraceContext); - } - - private static TextMapPropagator getPropagatorWithoutBaggage(PropagationConfig propagationConfig) { - String type = propagationConfig.getType(); - if ("B3".equals(type)) { - return B3Propagator.injectingSingleHeader(); - } else if ("W3C".equals(type)) { - return W3CTraceContextPropagator.getInstance(); - } - return TextMapPropagator.noop(); - } - - private static TextMapPropagator getPropagatorWithBaggage(PropagationConfig propagationConfig, - BaggageConfig baggageConfig, - OtelCurrentTraceContext currentTraceContext) { - String type = propagationConfig.getType(); - if ("B3".equals(type)) { - List remoteFields = baggageConfig.getRemoteFields(); - return TextMapPropagator.composite(B3Propagator.injectingSingleHeader(), - new BaggageTextMapPropagator(remoteFields, - new OtelBaggageManager(currentTraceContext, remoteFields, Collections.emptyList()))); - } else if ("W3C".equals(type)) { - List remoteFields = baggageConfig.getRemoteFields(); - return TextMapPropagator.composite(W3CTraceContextPropagator.getInstance(), - W3CBaggagePropagator.getInstance(), new BaggageTextMapPropagator(remoteFields, - new OtelBaggageManager(currentTraceContext, remoteFields, Collections.emptyList()))); - } - return TextMapPropagator.noop(); - } - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/utils/ObservationSupportUtil.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/utils/ObservationSupportUtil.java deleted file mode 100644 index 4cf8e05edf..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/utils/ObservationSupportUtil.java +++ /dev/null @@ -1,49 +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.tracing.utils; - -import org.apache.dubbo.common.utils.ClassUtils; - -public class ObservationSupportUtil { - - public static boolean isSupportObservation() { - return isClassPresent("io.micrometer.observation.Observation") - && isClassPresent("io.micrometer.observation.ObservationRegistry") - && isClassPresent("io.micrometer.observation.ObservationHandler"); - } - - public static boolean isSupportTracing() { - return isClassPresent("io.micrometer.tracing.Tracer") - && isClassPresent("io.micrometer.tracing.propagation.Propagator"); - } - - public static boolean isSupportOTelTracer() { - return isClassPresent("io.micrometer.tracing.otel.bridge.OtelTracer") - && isClassPresent("io.opentelemetry.sdk.trace.SdkTracerProvider") - && isClassPresent("io.opentelemetry.api.OpenTelemetry"); - } - - public static boolean isSupportBraveTracer() { - return isClassPresent("io.micrometer.tracing.Tracer") - && isClassPresent("io.micrometer.tracing.brave.bridge.BraveTracer") - && isClassPresent("brave.Tracing"); - } - - private static boolean isClassPresent(String className) { - return ClassUtils.isPresent(className, ObservationSupportUtil.class.getClassLoader()); - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter b/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter deleted file mode 100644 index a7efac7c5e..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter +++ /dev/null @@ -1 +0,0 @@ -observationreceiver=org.apache.dubbo.tracing.filter.ObservationReceiverFilter \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter b/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter deleted file mode 100644 index f13199c666..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter +++ /dev/null @@ -1 +0,0 @@ -observationsender=org.apache.dubbo.tracing.filter.ObservationSenderFilter \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactoryTest.java b/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactoryTest.java deleted file mode 100644 index 18f1a74e0e..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactoryTest.java +++ /dev/null @@ -1,34 +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.tracing.tracer; - -import org.apache.dubbo.common.utils.Assert; -import org.apache.dubbo.tracing.tracer.otel.OTelPropagatorProvider; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class PropagatorProviderFactoryTest { - - @Test - void testPropagatorProviderFactory() { - PropagatorProvider propagatorProvider = PropagatorProviderFactory.getPropagatorProvider(); - Assert.notNull(propagatorProvider, "PropagatorProvider should not be null"); - assertEquals(OTelPropagatorProvider.class, propagatorProvider.getClass()); - } -} \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProviderTest.java b/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProviderTest.java deleted file mode 100644 index 83f2cd2df0..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProviderTest.java +++ /dev/null @@ -1,39 +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.tracing.tracer.otel; - -import org.apache.dubbo.common.utils.Assert; - -import io.micrometer.tracing.propagation.Propagator; -import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.propagation.ContextPropagators; -import org.junit.jupiter.api.Test; - -import static org.mockito.Mockito.mock; - -class OTelPropagatorProviderTest { - - @Test - void testOTelPropagatorProvider() { - ContextPropagators contextPropagators = mock(ContextPropagators.class); - Tracer tracer = mock(Tracer.class); - OTelPropagatorProvider.createMicrometerPropagator(contextPropagators, tracer); - OTelPropagatorProvider oTelPropagatorProvider = new OTelPropagatorProvider(); - Propagator propagator = oTelPropagatorProvider.getPropagator(); - Assert.notNull(propagator, "Propagator don't be null."); - } -} \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProviderTest.java b/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProviderTest.java deleted file mode 100644 index 0374912c3a..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProviderTest.java +++ /dev/null @@ -1,53 +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.tracing.tracer.otel; - -import org.apache.dubbo.common.utils.Assert; -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.config.nested.BaggageConfig; -import org.apache.dubbo.config.nested.ExporterConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.tracer.TracerProvider; -import org.apache.dubbo.tracing.tracer.TracerProviderFactory; - -import io.micrometer.tracing.Tracer; -import io.micrometer.tracing.otel.bridge.OtelTracer; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class OpenTelemetryProviderTest { - - @Test - void testGetTracer() { - TracingConfig tracingConfig = new TracingConfig(); - tracingConfig.setEnabled(true); - ExporterConfig exporterConfig = new ExporterConfig(); - exporterConfig.setZipkinConfig(new ExporterConfig.ZipkinConfig("")); - tracingConfig.setTracingExporter(exporterConfig); - TracerProvider tracerProvider1 = TracerProviderFactory.getProvider(ApplicationModel.defaultModel(), tracingConfig); - Assert.notNull(tracerProvider1, "TracerProvider should not be null."); - Tracer tracer1 = tracerProvider1.getTracer(); - assertEquals(OtelTracer.class, tracer1.getClass()); - - tracingConfig.setBaggage(new BaggageConfig(false)); - TracerProvider tracerProvider2 = TracerProviderFactory.getProvider(ApplicationModel.defaultModel(), tracingConfig); - Assert.notNull(tracerProvider2, "TracerProvider should not be null."); - Tracer tracer2 = tracerProvider2.getTracer(); - assertEquals(OtelTracer.class, tracer2.getClass()); - } -} \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationSupportUtilTest.java b/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationSupportUtilTest.java deleted file mode 100644 index 3903053ca8..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationSupportUtilTest.java +++ /dev/null @@ -1,49 +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.tracing.utils; - -import org.apache.dubbo.common.utils.Assert; - -import org.junit.jupiter.api.Test; - -public class ObservationSupportUtilTest { - - @Test - void testIsSupportObservation() { - boolean supportObservation = ObservationSupportUtil.isSupportObservation(); - Assert.assertTrue(supportObservation, "ObservationSupportUtil.isSupportObservation() should return true"); - } - - @Test - void testIsSupportTracing() { - boolean supportTracing = ObservationSupportUtil.isSupportTracing(); - Assert.assertTrue(supportTracing, "ObservationSupportUtil.isSupportTracing() should return true"); - } - - @Test - void testIsSupportOTelTracer() { - boolean supportOTelTracer = ObservationSupportUtil.isSupportOTelTracer(); - Assert.assertTrue(supportOTelTracer, "ObservationSupportUtil.isSupportOTelTracer() should return true"); - } - - @Test - void testIsSupportBraveTracer() { - boolean supportBraveTracer = ObservationSupportUtil.isSupportBraveTracer(); - Assert.assertTrue(supportBraveTracer, "ObservationSupportUtil.isSupportOTelTracer() should return true"); - } -} diff --git a/dubbo-metrics/pom.xml b/dubbo-metrics/pom.xml index c10defb8d6..04abd6e077 100644 --- a/dubbo-metrics/pom.xml +++ b/dubbo-metrics/pom.xml @@ -24,7 +24,6 @@ dubbo-metrics-metadata dubbo-metrics-prometheus dubbo-metrics-config-center - dubbo-tracing org.apache.dubbo diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/pom.xml b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/pom.xml index e8d997bda9..b9e1369556 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/pom.xml +++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/pom.xml @@ -137,12 +137,6 @@ ${project.version} true - - org.apache.dubbo - dubbo-config-spring - ${project.version} - true - diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java index 10ffaa9be1..37f552fadf 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java +++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java @@ -18,7 +18,6 @@ package org.apache.dubbo.spring.boot.observability.autoconfigure; import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.config.spring.context.event.DubboConfigInitEvent; import org.apache.dubbo.qos.protocol.QosProtocolWrapper; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.spring.boot.observability.autoconfigure.annotation.ConditionalOnDubboTracingEnable; @@ -29,15 +28,14 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.boot.autoconfigure.AutoConfiguration; 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.ConditionalOnMissingClass; -import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; import java.util.Arrays; @@ -48,7 +46,7 @@ import java.util.Arrays; @AutoConfiguration(after = DubboMicrometerTracingAutoConfiguration.class, afterName = "org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration") @ConditionalOnDubboTracingEnable @ConditionalOnClass(name = {"io.micrometer.observation.Observation", "io.micrometer.tracing.Tracer"}) -public class DubboObservationAutoConfiguration implements BeanFactoryAware, ApplicationListener, Ordered { +public class DubboObservationAutoConfiguration implements BeanFactoryAware, SmartInitializingSingleton { private final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(QosProtocolWrapper.class); @@ -81,21 +79,16 @@ public class DubboObservationAutoConfiguration implements BeanFactoryAware, Appl } @Override - public void onApplicationEvent(DubboConfigInitEvent event) { + public void afterSingletonsInstantiated() { try { applicationModel.getBeanFactory().registerBean(beanFactory.getBean(io.micrometer.observation.ObservationRegistry.class)); - applicationModel.getBeanFactory().registerBean(beanFactory.getBean(io.micrometer.tracing.Tracer.class)); - applicationModel.getBeanFactory().registerBean(beanFactory.getBean(io.micrometer.tracing.propagation.Propagator.class)); + io.micrometer.tracing.Tracer bean = beanFactory.getBean(io.micrometer.tracing.Tracer.class); + applicationModel.getBeanFactory().registerBean(bean); } catch (NoSuchBeanDefinitionException e) { - logger.info("Please use a version of micrometer higher than 1.10.0: " + e.getMessage()); + logger.info("Please use a version of micrometer higher than 1.10.0 :{}" + e.getMessage()); } } - @Override - public int getOrder() { - return HIGHEST_PRECEDENCE; - } - @Configuration(proxyBeanMethods = false) @ConditionalOnClass(MeterRegistry.class) @ConditionalOnMissingClass("io.micrometer.tracing.Tracer") diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java index 8894b890cb..24be95c4ec 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java +++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java @@ -16,7 +16,8 @@ */ package org.apache.dubbo.spring.boot.observability.autoconfigure.brave; -import org.apache.dubbo.common.utils.StringUtils; +import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.rpc.model.ModuleModel; import org.apache.dubbo.spring.boot.autoconfigure.DubboConfigurationProperties; import org.apache.dubbo.spring.boot.observability.autoconfigure.DubboMicrometerTracingAutoConfiguration; import org.apache.dubbo.spring.boot.observability.autoconfigure.ObservabilityUtils; @@ -52,12 +53,12 @@ public class BraveAutoConfiguration { /** * Default value for application name if {@code spring.application.name} is not set. */ - private static final String DEFAULT_APPLICATION_NAME = "dubbo-application"; + private static final String DEFAULT_APPLICATION_NAME = "application"; - private final DubboConfigurationProperties dubboConfigProperties; + private final ModuleModel moduleModel; - public BraveAutoConfiguration(DubboConfigurationProperties dubboConfigProperties) { - this.dubboConfigProperties = dubboConfigProperties; + public BraveAutoConfiguration(ModuleModel moduleModel) { + this.moduleModel = moduleModel; } @Bean @@ -75,10 +76,9 @@ public class BraveAutoConfiguration { public brave.Tracing braveTracing(List spanHandlers, List tracingCustomizers, brave.propagation.CurrentTraceContext currentTraceContext, brave.propagation.Propagation.Factory propagationFactory, brave.sampler.Sampler sampler) { - String applicationName = dubboConfigProperties.getApplication().getName(); - if (StringUtils.isEmpty(applicationName)) { - applicationName = DEFAULT_APPLICATION_NAME; - } + String applicationName = moduleModel.getApplicationModel().getApplicationConfigManager().getApplication() + .map(ApplicationConfig::getName) + .orElse(DEFAULT_APPLICATION_NAME); brave.Tracing.Builder builder = brave.Tracing.newBuilder().currentTraceContext(currentTraceContext).traceId128Bit(true) .supportsJoin(false).propagationFactory(propagationFactory).sampler(sampler) .localServiceName(applicationName); diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java index 6b4e38f7c9..85babb77f8 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java +++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java @@ -18,7 +18,8 @@ package org.apache.dubbo.spring.boot.observability.autoconfigure.otel; import org.apache.dubbo.common.Version; -import org.apache.dubbo.common.utils.StringUtils; +import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.rpc.model.ModuleModel; import org.apache.dubbo.spring.boot.autoconfigure.DubboConfigurationProperties; import org.apache.dubbo.spring.boot.observability.autoconfigure.DubboMicrometerTracingAutoConfiguration; import org.apache.dubbo.spring.boot.observability.autoconfigure.ObservabilityUtils; @@ -51,12 +52,15 @@ public class OpenTelemetryAutoConfiguration { /** * Default value for application name if {@code spring.application.name} is not set. */ - private static final String DEFAULT_APPLICATION_NAME = "dubbo-application"; + private static final String DEFAULT_APPLICATION_NAME = "application"; private final DubboConfigurationProperties dubboConfigProperties; - OpenTelemetryAutoConfiguration(DubboConfigurationProperties dubboConfigProperties) { + private final ModuleModel moduleModel; + + OpenTelemetryAutoConfiguration(DubboConfigurationProperties dubboConfigProperties, ModuleModel moduleModel) { this.dubboConfigProperties = dubboConfigProperties; + this.moduleModel = moduleModel; } @Bean @@ -70,10 +74,9 @@ public class OpenTelemetryAutoConfiguration { @ConditionalOnMissingBean io.opentelemetry.sdk.trace.SdkTracerProvider otelSdkTracerProvider(ObjectProvider spanProcessors, io.opentelemetry.sdk.trace.samplers.Sampler sampler) { - String applicationName = dubboConfigProperties.getApplication().getName(); - if (StringUtils.isEmpty(applicationName)) { - applicationName = DEFAULT_APPLICATION_NAME; - } + String applicationName = moduleModel.getApplicationModel().getApplicationConfigManager().getApplication() + .map(ApplicationConfig::getName) + .orElse(DEFAULT_APPLICATION_NAME); io.opentelemetry.sdk.trace.SdkTracerProviderBuilder builder = io.opentelemetry.sdk.trace.SdkTracerProvider.builder().setSampler(sampler) .setResource(io.opentelemetry.sdk.resources.Resource.create(io.opentelemetry.api.common.Attributes.of(io.opentelemetry.semconv.resource.attributes.ResourceAttributes.SERVICE_NAME, applicationName))); spanProcessors.orderedStream().forEach(builder::addSpanProcessor); diff --git a/dubbo-test/dubbo-dependencies-all/pom.xml b/dubbo-test/dubbo-dependencies-all/pom.xml index 991154acbb..526743f360 100644 --- a/dubbo-test/dubbo-dependencies-all/pom.xml +++ b/dubbo-test/dubbo-dependencies-all/pom.xml @@ -193,11 +193,6 @@ dubbo-metrics-prometheus ${project.version} - - org.apache.dubbo - dubbo-tracing - ${project.version} - @@ -210,6 +205,7 @@ dubbo-monitor-default ${project.version} + org.apache.dubbo From 25c2b3808a03a42c9d2cb2ca3e715b5f9ac043e5 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Wed, 21 Jun 2023 09:23:40 +0800 Subject: [PATCH 15/21] Disable register if registry disable register (#12579) * Disable register if registry disable register * Fix tag * Fix tag --- .../dubbo/config/ServiceConfigBase.java | 20 ++++++++++++++++++- .../apache/dubbo/config/ServiceConfig.java | 10 +++++++--- .../config/deploy/DefaultModuleDeployer.java | 2 +- .../org/apache/dubbo/registry/Constants.java | 1 + .../registry/support/AbstractRegistry.java | 10 +++++----- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java index 265779ed3f..60c5c641ec 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java @@ -426,7 +426,25 @@ public abstract class ServiceConfigBase extends AbstractServiceConfig { public abstract boolean isUnexported(); + /** + * Export service to network + * + * @param register Whether register service to registry. If false, can be registered manually + * through the {@link ServiceConfigBase#register(boolean)} API. + */ public abstract void export(boolean register); - public abstract void register(); + /** + * Register delay published service to registry. + */ + public final void register() { + register(false); + } + + /** + * Register delay published service to registry. + * + * @param onlyDefault only register those services that export with configured register false + */ + public abstract void register(boolean onlyDefault); } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java index a382c2fdb4..b22b0d2ab3 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java @@ -57,10 +57,10 @@ import java.beans.Transient; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; -import java.util.TreeSet; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeSet; import java.util.UUID; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -99,6 +99,7 @@ import static org.apache.dubbo.config.Constants.DUBBO_PORT_TO_BIND; import static org.apache.dubbo.config.Constants.DUBBO_PORT_TO_REGISTRY; import static org.apache.dubbo.config.Constants.SCOPE_NONE; import static org.apache.dubbo.registry.Constants.REGISTER_KEY; +import static org.apache.dubbo.registry.Constants.REGISTER_ORIGIN_KEY; import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY; import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY; import static org.apache.dubbo.remoting.Constants.IS_PU_SERVER_KEY; @@ -310,7 +311,7 @@ public class ServiceConfig extends ServiceConfigBase { } @Override - public void register() { + public void register(boolean onlyDefault) { if (!this.exported) { return; } @@ -321,7 +322,9 @@ public class ServiceConfig extends ServiceConfigBase { } for (Exporter exporter : exporters) { - exporter.register(); + if (!onlyDefault || exporter.getInvoker().getUrl().getParameter(REGISTER_ORIGIN_KEY, true)) { + exporter.register(); + } } } } @@ -813,6 +816,7 @@ public class ServiceConfig extends ServiceConfigBase { @SuppressWarnings({"unchecked", "rawtypes"}) private void doExportUrl(URL url, boolean withMetaData, boolean register) { if (!register) { + url = url.addParameter(REGISTER_ORIGIN_KEY, url.getParameter(REGISTER_KEY, true)); url = url.addParameter(REGISTER_KEY, false); } Invoker invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, url); diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java index 6bde316558..004be0e224 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java @@ -441,7 +441,7 @@ public class DefaultModuleDeployer extends AbstractDeployer impleme if (!sc.isExported()) { return; } - sc.register(); + sc.register(true); } private void unexportServices() { diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java index d21534436c..be991b256e 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java @@ -21,6 +21,7 @@ public interface Constants { String REGISTER_IP_KEY = "register.ip"; String REGISTER_KEY = "register"; + String REGISTER_ORIGIN_KEY = "register_origin"; String SUBSCRIBE_KEY = "subscribe"; diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java index 3a68a26433..1ba9b330b8 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java @@ -61,12 +61,12 @@ import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE; import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN; import static org.apache.dubbo.common.constants.CommonConstants.FILE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_LOCAL_FILE_CACHE_ENABLED; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_EMPTY_ADDRESS; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_NOTIFY_EVENT; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_DESTROY_UNREGISTER_URL; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_READ_WRITE_CACHE_FILE; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_DELETE_LOCKFILE; import static org.apache.dubbo.common.constants.LoggerCodeConstants.INTERNAL_ERROR; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_EMPTY_ADDRESS; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_DELETE_LOCKFILE; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_DESTROY_UNREGISTER_URL; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_NOTIFY_EVENT; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_READ_WRITE_CACHE_FILE; import static org.apache.dubbo.common.constants.RegistryConstants.ACCEPTS_KEY; import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_CATEGORY; import static org.apache.dubbo.common.constants.RegistryConstants.DYNAMIC_KEY; From 3b7934f5122833685acc6cd9bcff208f92ee9a6b Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Wed, 21 Jun 2023 11:29:54 +0800 Subject: [PATCH 16/21] Fix registry repeat export same service (#12578) * Fix registry repeat export same service * fix uts * Fix export * Fix export --- ...ryCenterExportProviderIntegrationTest.java | 2 +- ...ryCenterExportProviderIntegrationTest.java | 2 +- .../RegistryScopeModelInitializer.java | 4 +- .../registry/integration/ExporterFactory.java | 42 +++++++++++++ .../integration/ReferenceCountExporter.java | 62 +++++++++++++++++++ .../integration/RegistryProtocol.java | 13 ++-- 6 files changed, 118 insertions(+), 7 deletions(-) create mode 100644 dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ExporterFactory.java create mode 100644 dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ReferenceCountExporter.java diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderIntegrationTest.java index 445ddb6dfc..d2f9b7ee2d 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderIntegrationTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderIntegrationTest.java @@ -188,7 +188,7 @@ class MultipleRegistryCenterExportProviderIntegrationTest implements Integration // 1. InjvmExporter // 2. DubboExporter with service-discovery-registry protocol // 3. DubboExporter with registry protocol - Assertions.assertEquals(exporterListener.getExportedExporters().size(), 7); + Assertions.assertEquals(exporterListener.getExportedExporters().size(), 4); // The exported exporter contains MultipleRegistryCenterExportProviderFilter Assertions.assertTrue(exporterListener.getFilters().contains(filter)); diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportprovider/SingleRegistryCenterExportProviderIntegrationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportprovider/SingleRegistryCenterExportProviderIntegrationTest.java index 3ab4bf7b53..41de19efcb 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportprovider/SingleRegistryCenterExportProviderIntegrationTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/exportprovider/SingleRegistryCenterExportProviderIntegrationTest.java @@ -195,7 +195,7 @@ class SingleRegistryCenterExportProviderIntegrationTest implements IntegrationTe // 1. InjvmExporter // 2. DubboExporter with service-discovery-registry protocol // 3. DubboExporter with registry protocol - Assertions.assertEquals(exporterListener.getExportedExporters().size(), 5); + Assertions.assertEquals(exporterListener.getExportedExporters().size(), 4); // The exported exporter contains SingleRegistryCenterExportProviderFilter Assertions.assertTrue(exporterListener.getFilters().contains(filter)); // The consumer can be notified and get provider's metadata through metadata mapping info. diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryScopeModelInitializer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryScopeModelInitializer.java index 6be4e29947..40c788985c 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryScopeModelInitializer.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryScopeModelInitializer.java @@ -17,6 +17,7 @@ package org.apache.dubbo.registry; import org.apache.dubbo.common.beans.factory.ScopeBeanFactory; +import org.apache.dubbo.registry.integration.ExporterFactory; import org.apache.dubbo.registry.support.RegistryManager; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.FrameworkModel; @@ -26,7 +27,8 @@ import org.apache.dubbo.rpc.model.ScopeModelInitializer; public class RegistryScopeModelInitializer implements ScopeModelInitializer { @Override public void initializeFrameworkModel(FrameworkModel frameworkModel) { - + ScopeBeanFactory beanFactory = frameworkModel.getBeanFactory(); + beanFactory.registerBean(ExporterFactory.class); } @Override diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ExporterFactory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ExporterFactory.java new file mode 100644 index 0000000000..5eebc1bcaa --- /dev/null +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ExporterFactory.java @@ -0,0 +1,42 @@ +/* + * 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.registry.integration; + +import org.apache.dubbo.rpc.Exporter; + +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; + +public class ExporterFactory { + private final Map> exporters = new ConcurrentHashMap<>(); + + protected ReferenceCountExporter createExporter(String providerKey, Callable> exporterProducer) { + return exporters.computeIfAbsent(providerKey, + key -> { + try { + return new ReferenceCountExporter<>(exporterProducer.call(), key, this); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + protected void remove(String key, ReferenceCountExporter exporter) { + exporters.remove(key, exporter); + } +} diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ReferenceCountExporter.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ReferenceCountExporter.java new file mode 100644 index 0000000000..bcdce7172f --- /dev/null +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ReferenceCountExporter.java @@ -0,0 +1,62 @@ +/* + * 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.registry.integration; + +import org.apache.dubbo.rpc.Exporter; +import org.apache.dubbo.rpc.Invoker; + +import java.util.concurrent.atomic.AtomicInteger; + +public class ReferenceCountExporter implements Exporter { + private final Exporter exporter; + private final String providerKey; + private final ExporterFactory exporterFactory; + private final AtomicInteger count = new AtomicInteger(0); + + public ReferenceCountExporter(Exporter exporter, String providerKey, ExporterFactory exporterFactory) { + this.exporter = exporter; + this.providerKey = providerKey; + this.exporterFactory = exporterFactory; + } + + @Override + public Invoker getInvoker() { + return exporter.getInvoker(); + } + + public void increaseCount() { + count.incrementAndGet(); + } + + @Override + public void unexport() { + if (count.decrementAndGet() == 0) { + exporter.unexport(); + } + exporterFactory.remove(providerKey, this); + } + + @Override + public void register() { + + } + + @Override + public void unregister() { + + } +} diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java index a9e3b908c7..b69376e784 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java @@ -171,6 +171,7 @@ public class RegistryProtocol implements Protocol, ScopeModelAware { private ConcurrentMap reExportFailedTasks = new ConcurrentHashMap<>(); private HashedWheelTimer retryTimer = new HashedWheelTimer(new NamedThreadFactory("DubboReexportTimer", true), DEFAULT_REGISTRY_RETRY_PERIOD, TimeUnit.MILLISECONDS, 128); private FrameworkModel frameworkModel; + private ExporterFactory exporterFactory; //Filter the parameters that do not need to be output in url(Starting with .) private static String[] getFilteredKeys(URL url) { @@ -190,6 +191,7 @@ public class RegistryProtocol implements Protocol, ScopeModelAware { @Override public void setFrameworkModel(FrameworkModel frameworkModel) { this.frameworkModel = frameworkModel; + this.exporterFactory = frameworkModel.getBeanFactory().getBean(ExporterFactory.class); } public void setProtocol(Protocol protocol) { @@ -312,11 +314,13 @@ public class RegistryProtocol implements Protocol, ScopeModelAware { private ExporterChangeableWrapper doLocalExport(final Invoker originInvoker, URL providerUrl) { String providerUrlKey = getProviderUrlKey(originInvoker); String registryUrlKey = getRegistryUrlKey(originInvoker); + Invoker invokerDelegate = new InvokerDelegate<>(originInvoker, providerUrl); + ReferenceCountExporter exporter = exporterFactory.createExporter(providerUrlKey, () -> protocol.export(invokerDelegate)); return (ExporterChangeableWrapper) bounds.computeIfAbsent(providerUrlKey, _k -> new ConcurrentHashMap<>()) - .computeIfAbsent(registryUrlKey, s ->{ - Invoker invokerDelegate = new InvokerDelegate<>(originInvoker, providerUrl); - return new ExporterChangeableWrapper<>((Exporter) protocol.export(invokerDelegate), originInvoker); + .computeIfAbsent(registryUrlKey, s -> { + return new ExporterChangeableWrapper<>( + (ReferenceCountExporter) exporter, originInvoker); }); } @@ -953,8 +957,9 @@ public class RegistryProtocol implements Protocol, ScopeModelAware { private NotifyListener notifyListener; private final AtomicBoolean registered = new AtomicBoolean(false); - public ExporterChangeableWrapper(Exporter exporter, Invoker originInvoker) { + public ExporterChangeableWrapper(ReferenceCountExporter exporter, Invoker originInvoker) { this.exporter = exporter; + exporter.increaseCount(); this.originInvoker = originInvoker; FrameworkExecutorRepository frameworkExecutorRepository = originInvoker.getUrl().getOrDefaultFrameworkModel().getBeanFactory() .getBean(FrameworkExecutorRepository.class); From 9577d464a092596085bdc8f7c78ea3f482767246 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Wed, 21 Jun 2023 13:22:27 +0800 Subject: [PATCH 17/21] Triple set resolve fallback enable as default (#12575) * Triple set resolve fallback enable as default * use throw --- .../org/apache/dubbo/rpc/PathResolver.java | 4 ++- .../rpc/protocol/tri/TriplePathResolver.java | 9 ++++-- .../rpc/protocol/tri/TripleProtocol.java | 28 +++++++++++++++---- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/PathResolver.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/PathResolver.java index c3e910a56d..83c5979cb8 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/PathResolver.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/PathResolver.java @@ -27,7 +27,9 @@ import org.apache.dubbo.common.extension.SPI; @SPI(value = CommonConstants.TRIPLE, scope = ExtensionScope.FRAMEWORK) public interface PathResolver { - void add(String path, Invoker invoker); + Invoker add(String path, Invoker invoker); + + Invoker addIfAbsent(String path, Invoker invoker); Invoker resolve(String path); diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriplePathResolver.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriplePathResolver.java index a508e936cf..f3f9ebbc68 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriplePathResolver.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriplePathResolver.java @@ -28,8 +28,13 @@ public class TriplePathResolver implements PathResolver { private final ConcurrentHashMap nativeStub = new ConcurrentHashMap<>(); @Override - public void add(String path, Invoker invoker) { - path2Invoker.put(path, invoker); + public Invoker add(String path, Invoker invoker) { + return path2Invoker.put(path, invoker); + } + + @Override + public Invoker addIfAbsent(String path, Invoker invoker) { + return path2Invoker.putIfAbsent(path, invoker); } @Override diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocol.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocol.java index 49650083be..4ec09e4a56 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocol.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocol.java @@ -44,9 +44,9 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.ExecutorService; +import static org.apache.dubbo.config.Constants.SERVER_THREAD_POOL_NAME; import static org.apache.dubbo.rpc.Constants.H2_IGNORE_1_0_0_KEY; import static org.apache.dubbo.rpc.Constants.H2_RESOLVE_FALLBACK_TO_DEFAULT_KEY; -import static org.apache.dubbo.config.Constants.SERVER_THREAD_POOL_NAME; import static org.apache.dubbo.rpc.Constants.H2_SUPPORT_NO_LOWER_HEADER_KEY; public class TripleProtocol extends AbstractProtocol { @@ -65,7 +65,7 @@ public class TripleProtocol extends AbstractProtocol { public static boolean IGNORE_1_0_0_VERSION = false; - public static boolean RESOLVE_FALLBACK_TO_DEFAULT = false; + public static boolean RESOLVE_FALLBACK_TO_DEFAULT = true; public TripleProtocol(FrameworkModel frameworkModel) { this.frameworkModel = frameworkModel; @@ -77,7 +77,7 @@ public class TripleProtocol extends AbstractProtocol { IGNORE_1_0_0_VERSION = ConfigurationUtils.getEnvConfiguration(ApplicationModel.defaultModel()) .getBoolean(H2_IGNORE_1_0_0_KEY, false); RESOLVE_FALLBACK_TO_DEFAULT = ConfigurationUtils.getEnvConfiguration(ApplicationModel.defaultModel()) - .getBoolean(H2_RESOLVE_FALLBACK_TO_DEFAULT_KEY, false); + .getBoolean(H2_RESOLVE_FALLBACK_TO_DEFAULT_KEY, true); Set supported = frameworkModel.getExtensionLoader(DeCompressor.class) .getSupportedExtensions(); this.acceptEncodings = String.join(",", supported); @@ -113,9 +113,27 @@ public class TripleProtocol extends AbstractProtocol { invokers.add(invoker); - pathResolver.add(url.getServiceKey(), invoker); + Invoker previous = pathResolver.add(url.getServiceKey(), invoker); + if (previous != null) { + if (url.getServiceKey().equals(url.getServiceModel().getServiceModel().getInterfaceName())) { + logger.info("Already exists an invoker[" + previous.getUrl() + "] on path[" + url.getServiceKey() + + "], dubbo will override with invoker[" + url + "]"); + } else { + throw new IllegalStateException("Already exists an invoker[" + previous.getUrl() + "] on path[" + + url.getServiceKey() + "], failed to add invoker[" + url + + "] , please use unique serviceKey."); + } + } if (RESOLVE_FALLBACK_TO_DEFAULT) { - pathResolver.add(url.getServiceModel().getServiceModel().getInterfaceName(), invoker); + previous = pathResolver.addIfAbsent(url.getServiceModel().getServiceModel().getInterfaceName(), invoker); + if (previous != null) { + logger.info("Already exists an invoker[" + previous.getUrl() + "] on path[" + + url.getServiceModel().getServiceModel().getInterfaceName() + + "], dubbo will skip override with invoker[" + url + "]"); + } else { + logger.info("Add fallback triple invoker[" + url + "] to path[" + + url.getServiceModel().getServiceModel().getInterfaceName() + "] with invoker[" + url + "]"); + } } // set service status From f28c2fec72c16c6b77be1b6ad7615562f5a5eecc Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Thu, 22 Jun 2023 08:49:23 +0800 Subject: [PATCH 18/21] Fix alibaba Rpc compact (#12581) * Fix alibaba Rpc compact * Fix alibaba Rpc compact * Fix alibaba Rpc compact * Fix alibaba Rpc compact --- .../com/alibaba/dubbo/common/Constants.java | 541 +++++++++++++++++- .../com/alibaba/dubbo/rpc/RpcContext.java | 20 + .../com/alibaba/dubbo/rpc/RpcException.java | 6 +- 3 files changed, 551 insertions(+), 16 deletions(-) diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/Constants.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/Constants.java index f62a9bd177..4ed46e5e23 100644 --- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/Constants.java +++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/Constants.java @@ -23,21 +23,532 @@ import org.apache.dubbo.common.constants.QosConstants; import org.apache.dubbo.common.constants.RegistryConstants; import org.apache.dubbo.common.constants.RemotingConstants; +import java.util.concurrent.ExecutorService; +import java.util.regex.Pattern; + @Deprecated public class Constants implements CommonConstants, - QosConstants, - FilterConstants, - RegistryConstants, - RemotingConstants, - org.apache.dubbo.config.Constants, - org.apache.dubbo.remoting.Constants, - org.apache.dubbo.rpc.cluster.Constants, - org.apache.dubbo.monitor.Constants, - org.apache.dubbo.rpc.Constants, - org.apache.dubbo.rpc.protocol.dubbo.Constants, - org.apache.dubbo.common.serialize.Constants, - org.apache.dubbo.common.config.configcenter.Constants, - org.apache.dubbo.metadata.report.support.Constants , - org.apache.dubbo.rpc.protocol.rest.Constants, - org.apache.dubbo.registry.Constants { + QosConstants, + FilterConstants, + RegistryConstants, + RemotingConstants, + org.apache.dubbo.config.Constants, + org.apache.dubbo.remoting.Constants, + org.apache.dubbo.rpc.cluster.Constants, + org.apache.dubbo.monitor.Constants, + org.apache.dubbo.rpc.Constants, + org.apache.dubbo.rpc.protocol.dubbo.Constants, + org.apache.dubbo.common.serialize.Constants, + org.apache.dubbo.common.config.configcenter.Constants, + org.apache.dubbo.metadata.report.support.Constants, + org.apache.dubbo.rpc.protocol.rest.Constants, + org.apache.dubbo.registry.Constants { + public static final String PROVIDER = "provider"; + + public static final String CONSUMER = "consumer"; + + public static final String REGISTER = "register"; + + public static final String UNREGISTER = "unregister"; + + public static final String SUBSCRIBE = "subscribe"; + + public static final String UNSUBSCRIBE = "unsubscribe"; + + public static final String CATEGORY_KEY = "category"; + + public static final String PROVIDERS_CATEGORY = "providers"; + + public static final String CONSUMERS_CATEGORY = "consumers"; + + public static final String ROUTERS_CATEGORY = "routers"; + + public static final String CONFIGURATORS_CATEGORY = "configurators"; + + public static final String DEFAULT_CATEGORY = PROVIDERS_CATEGORY; + + public static final String ENABLED_KEY = "enabled"; + + public static final String DISABLED_KEY = "disabled"; + + public static final String VALIDATION_KEY = "validation"; + + public static final String CACHE_KEY = "cache"; + + public static final String DYNAMIC_KEY = "dynamic"; + + public static final String DUBBO_PROPERTIES_KEY = "dubbo.properties.file"; + + public static final String DEFAULT_DUBBO_PROPERTIES = "dubbo.properties"; + + public static final String SENT_KEY = "sent"; + + public static final boolean DEFAULT_SENT = false; + + public static final String REGISTRY_PROTOCOL = "registry"; + + public static final String $INVOKE = "$invoke"; + + public static final String $ECHO = "$echo"; + + public static final int DEFAULT_IO_THREADS = Runtime.getRuntime() + .availableProcessors() + 1; + + public static final String DEFAULT_PROXY = "javassist"; + + public static final int DEFAULT_PAYLOAD = 8 * 1024 * 1024; + + public static final String DEFAULT_CLUSTER = "failover"; + + public static final String DEFAULT_DIRECTORY = "dubbo"; + + public static final String DEFAULT_LOADBALANCE = "random"; + + public static final String DEFAULT_PROTOCOL = "dubbo"; + + public static final String DEFAULT_EXCHANGER = "header"; + + public static final String DEFAULT_TRANSPORTER = "netty"; + + public static final String DEFAULT_REMOTING_SERVER = "netty"; + + public static final String DEFAULT_REMOTING_CLIENT = "netty"; + + public static final String DEFAULT_REMOTING_CODEC = "dubbo"; + + public static final String DEFAULT_REMOTING_SERIALIZATION = "hessian2"; + + public static final String DEFAULT_HTTP_SERVER = "servlet"; + + public static final String DEFAULT_HTTP_CLIENT = "jdk"; + + public static final String DEFAULT_HTTP_SERIALIZATION = "json"; + + public static final String DEFAULT_CHARSET = "UTF-8"; + + public static final int DEFAULT_WEIGHT = 100; + + public static final int DEFAULT_FORKS = 2; + + public static final String DEFAULT_THREAD_NAME = "Dubbo"; + + public static final int DEFAULT_CORE_THREADS = 0; + + public static final int DEFAULT_THREADS = 200; + + public static final int DEFAULT_QUEUES = 0; + + public static final int DEFAULT_ALIVE = 60 * 1000; + + public static final int DEFAULT_CONNECTIONS = 0; + + public static final int DEFAULT_ACCEPTS = 0; + + public static final int DEFAULT_IDLE_TIMEOUT = 600 * 1000; + + public static final int DEFAULT_HEARTBEAT = 60 * 1000; + + public static final int DEFAULT_TIMEOUT = 1000; + + public static final int DEFAULT_CONNECT_TIMEOUT = 3000; + + public static final int DEFAULT_RETRIES = 2; + + public static final int DEFAULT_BUFFER_SIZE = 8 * 1024; + + public static final int MAX_BUFFER_SIZE = 16 * 1024; + + public static final int MIN_BUFFER_SIZE = 1 * 1024; + + public static final String REMOVE_VALUE_PREFIX = "-"; + + public static final String HIDE_KEY_PREFIX = "."; + + public static final String DEFAULT_KEY_PREFIX = "default."; + + public static final String DEFAULT_KEY = "default"; + + public static final String LOADBALANCE_KEY = "loadbalance"; + + public static final String ROUTER_KEY = "router"; + + public static final String CLUSTER_KEY = "cluster"; + + public static final String REGISTRY_KEY = "registry"; + + public static final String MONITOR_KEY = "monitor"; + + public static final String SIDE_KEY = "side"; + + public static final String PROVIDER_SIDE = "provider"; + + public static final String CONSUMER_SIDE = "consumer"; + + public static final String DEFAULT_REGISTRY = "dubbo"; + + public static final String BACKUP_KEY = "backup"; + + public static final String DIRECTORY_KEY = "directory"; + + public static final String DEPRECATED_KEY = "deprecated"; + + public static final String ANYHOST_KEY = "anyhost"; + + public static final String ANYHOST_VALUE = "0.0.0.0"; + + public static final String LOCALHOST_KEY = "localhost"; + + public static final String LOCALHOST_VALUE = "127.0.0.1"; + + public static final String APPLICATION_KEY = "application"; + + public static final String LOCAL_KEY = "local"; + + public static final String STUB_KEY = "stub"; + + public static final String MOCK_KEY = "mock"; + + public static final String PROTOCOL_KEY = "protocol"; + + public static final String PROXY_KEY = "proxy"; + + public static final String WEIGHT_KEY = "weight"; + + public static final String FORKS_KEY = "forks"; + + public static final String DEFAULT_THREADPOOL = "limited"; + + public static final String DEFAULT_CLIENT_THREADPOOL = "cached"; + + public static final String THREADPOOL_KEY = "threadpool"; + + public static final String THREAD_NAME_KEY = "threadname"; + + public static final String IO_THREADS_KEY = "iothreads"; + + public static final String CORE_THREADS_KEY = "corethreads"; + + public static final String THREADS_KEY = "threads"; + + public static final String QUEUES_KEY = "queues"; + + public static final String ALIVE_KEY = "alive"; + + public static final String EXECUTES_KEY = "executes"; + + public static final String BUFFER_KEY = "buffer"; + + public static final String PAYLOAD_KEY = "payload"; + + public static final String REFERENCE_FILTER_KEY = "reference.filter"; + + public static final String INVOKER_LISTENER_KEY = "invoker.listener"; + + public static final String SERVICE_FILTER_KEY = "service.filter"; + + public static final String EXPORTER_LISTENER_KEY = "exporter.listener"; + + public static final String ACCESS_LOG_KEY = "accesslog"; + + public static final String ACTIVES_KEY = "actives"; + + public static final String CONNECTIONS_KEY = "connections"; + + public static final String ACCEPTS_KEY = "accepts"; + + public static final String IDLE_TIMEOUT_KEY = "idle.timeout"; + + public static final String HEARTBEAT_KEY = "heartbeat"; + + public static final String HEARTBEAT_TIMEOUT_KEY = "heartbeat.timeout"; + + public static final String CONNECT_TIMEOUT_KEY = "connect.timeout"; + + public static final String TIMEOUT_KEY = "timeout"; + + public static final String RETRIES_KEY = "retries"; + + public static final String PROMPT_KEY = "prompt"; + + public static final String DEFAULT_PROMPT = "dubbo>"; + + public static final String CODEC_KEY = "codec"; + + public static final String SERIALIZATION_KEY = "serialization"; + + public static final String EXCHANGER_KEY = "exchanger"; + + public static final String TRANSPORTER_KEY = "transporter"; + + public static final String SERVER_KEY = "server"; + + public static final String CLIENT_KEY = "client"; + + public static final String ID_KEY = "id"; + + public static final String ASYNC_KEY = "async"; + + public static final String RETURN_KEY = "return"; + + public static final String TOKEN_KEY = "token"; + + public static final String METHOD_KEY = "method"; + + public static final String METHODS_KEY = "methods"; + + public static final String CHARSET_KEY = "charset"; + + public static final String RECONNECT_KEY = "reconnect"; + + public static final String SEND_RECONNECT_KEY = "send.reconnect"; + + public static final int DEFAULT_RECONNECT_PERIOD = 2000; + + public static final String SHUTDOWN_TIMEOUT_KEY = "shutdown.timeout"; + + public static final int DEFAULT_SHUTDOWN_TIMEOUT = 1000 * 60 * 15; + + public static final String PID_KEY = "pid"; + + public static final String TIMESTAMP_KEY = "timestamp"; + + public static final String WARMUP_KEY = "warmup"; + + public static final int DEFAULT_WARMUP = 10 * 60 * 1000; + + public static final String CHECK_KEY = "check"; + + public static final String REGISTER_KEY = "register"; + + public static final String SUBSCRIBE_KEY = "subscribe"; + + public static final String GROUP_KEY = "group"; + + public static final String PATH_KEY = "path"; + + public static final String INTERFACE_KEY = "interface"; + + public static final String GENERIC_KEY = "generic"; + + public static final String FILE_KEY = "file"; + + public static final String WAIT_KEY = "wait"; + + public static final String CLASSIFIER_KEY = "classifier"; + + public static final String VERSION_KEY = "version"; + + public static final String REVISION_KEY = "revision"; + + public static final String DUBBO_VERSION_KEY = "dubbo"; + + public static final String HESSIAN_VERSION_KEY = "hessian.version"; + + public static final String DISPATCHER_KEY = "dispatcher"; + + public static final String CHANNEL_HANDLER_KEY = "channel.handler"; + + public static final String DEFAULT_CHANNEL_HANDLER = "default"; + + public static final String ANY_VALUE = "*"; + + public static final String COMMA_SEPARATOR = ","; + + public static final Pattern COMMA_SPLIT_PATTERN = Pattern + .compile("\\s*[,]+\\s*"); + + public final static String PATH_SEPARATOR = "/"; + + public static final String REGISTRY_SEPARATOR = "|"; + + public static final Pattern REGISTRY_SPLIT_PATTERN = Pattern + .compile("\\s*[|;]+\\s*"); + + public static final String SEMICOLON_SEPARATOR = ";"; + + public static final Pattern SEMICOLON_SPLIT_PATTERN = Pattern + .compile("\\s*[;]+\\s*"); + + public static final String CONNECT_QUEUE_CAPACITY = "connect.queue.capacity"; + + public static final String CONNECT_QUEUE_WARNING_SIZE = "connect.queue.warning.size"; + + public static final int DEFAULT_CONNECT_QUEUE_WARNING_SIZE = 1000; + + public static final String CHANNEL_ATTRIBUTE_READONLY_KEY = "channel.readonly"; + + public static final String CHANNEL_READONLYEVENT_SENT_KEY = "channel.readonly.sent"; + + public static final String CHANNEL_SEND_READONLYEVENT_KEY = "channel.readonly.send"; + + public static final String COUNT_PROTOCOL = "count"; + + public static final String TRACE_PROTOCOL = "trace"; + + public static final String EMPTY_PROTOCOL = "empty"; + + public static final String ADMIN_PROTOCOL = "admin"; + + public static final String PROVIDER_PROTOCOL = "provider"; + + public static final String CONSUMER_PROTOCOL = "consumer"; + + public static final String ROUTE_PROTOCOL = "route"; + + public static final String SCRIPT_PROTOCOL = "script"; + + public static final String CONDITION_PROTOCOL = "condition"; + + public static final String MOCK_PROTOCOL = "mock"; + + public static final String RETURN_PREFIX = "return "; + + public static final String THROW_PREFIX = "throw"; + + public static final String FAIL_PREFIX = "fail:"; + + public static final String FORCE_PREFIX = "force:"; + + public static final String FORCE_KEY = "force"; + + public static final String MERGER_KEY = "merger"; + + public static final String CLUSTER_AVAILABLE_CHECK_KEY = "cluster.availablecheck"; + + public static final boolean DEFAULT_CLUSTER_AVAILABLE_CHECK = true; + + public static final String CLUSTER_STICKY_KEY = "sticky"; + + public static final boolean DEFAULT_CLUSTER_STICKY = false; + + public static final String LAZY_CONNECT_KEY = "lazy"; + + public static final String LAZY_CONNECT_INITIAL_STATE_KEY = "connect.lazy.initial.state"; + + public static final boolean DEFAULT_LAZY_CONNECT_INITIAL_STATE = true; + + public static final String REGISTRY_FILESAVE_SYNC_KEY = "save.file"; + + public static final String REGISTRY_RETRY_PERIOD_KEY = "retry.period"; + + public static final int DEFAULT_REGISTRY_RETRY_PERIOD = 5 * 1000; + + public static final String REGISTRY_RECONNECT_PERIOD_KEY = "reconnect.period"; + + public static final int DEFAULT_REGISTRY_RECONNECT_PERIOD = 3 * 1000; + + public static final String SESSION_TIMEOUT_KEY = "session"; + + public static final int DEFAULT_SESSION_TIMEOUT = 60 * 1000; + + public static final String EXPORT_KEY = "export"; + + public static final String REFER_KEY = "refer"; + + public static final String CALLBACK_SERVICE_KEY = "callback.service.instid"; + + public static final String CALLBACK_INSTANCES_LIMIT_KEY = "callbacks"; + + public static final int DEFAULT_CALLBACK_INSTANCES = 1; + + public static final String CALLBACK_SERVICE_PROXY_KEY = "callback.service.proxy"; + + public static final String IS_CALLBACK_SERVICE = "is_callback_service"; + + public static final String CHANNEL_CALLBACK_KEY = "channel.callback.invokers.key"; + + @Deprecated + public static final String SHUTDOWN_WAIT_SECONDS_KEY = "dubbo.service.shutdown.wait.seconds"; + + public static final String SHUTDOWN_WAIT_KEY = "dubbo.service.shutdown.wait"; + + public static final String IS_SERVER_KEY = "isserver"; + + public static final int DEFAULT_SERVER_SHUTDOWN_TIMEOUT = 10000; + + public static final String ON_CONNECT_KEY = "onconnect"; + + public static final String ON_DISCONNECT_KEY = "ondisconnect"; + + public static final String ON_INVOKE_METHOD_KEY = "oninvoke.method"; + + public static final String ON_RETURN_METHOD_KEY = "onreturn.method"; + + public static final String ON_THROW_METHOD_KEY = "onthrow.method"; + + public static final String ON_INVOKE_INSTANCE_KEY = "oninvoke.instance"; + + public static final String ON_RETURN_INSTANCE_KEY = "onreturn.instance"; + + public static final String ON_THROW_INSTANCE_KEY = "onthrow.instance"; + + public static final String OVERRIDE_PROTOCOL = "override"; + + public static final String PRIORITY_KEY = "priority"; + + public static final String RULE_KEY = "rule"; + + public static final String TYPE_KEY = "type"; + + public static final String RUNTIME_KEY = "runtime"; + + public static final String ROUTER_TYPE_CLEAR = "clean"; + + public static final String DEFAULT_SCRIPT_TYPE_KEY = "javascript"; + + public static final String STUB_EVENT_KEY = "dubbo.stub.event"; + + public static final boolean DEFAULT_STUB_EVENT = false; + + public static final String STUB_EVENT_METHODS_KEY = "dubbo.stub.event.methods"; + + public static final String INVOCATION_NEED_MOCK = "invocation.need.mock"; + + public static final String LOCAL_PROTOCOL = "injvm"; + + public static final String AUTO_ATTACH_INVOCATIONID_KEY = "invocationid.autoattach"; + + public static final String SCOPE_KEY = "scope"; + + public static final String SCOPE_LOCAL = "local"; + + public static final String SCOPE_REMOTE = "remote"; + + public static final String SCOPE_NONE = "none"; + + public static final String RELIABLE_PROTOCOL = "napoli"; + + public static final String TPS_LIMIT_RATE_KEY = "tps"; + + public static final String TPS_LIMIT_INTERVAL_KEY = "tps.interval"; + + public static final long DEFAULT_TPS_LIMIT_INTERVAL = 60 * 1000; + + public static final String DECODE_IN_IO_THREAD_KEY = "decode.in.io"; + + public static final boolean DEFAULT_DECODE_IN_IO_THREAD = true; + + public static final String INPUT_KEY = "input"; + + public static final String OUTPUT_KEY = "output"; + + public static final String EXECUTOR_SERVICE_COMPONENT_KEY = ExecutorService.class.getName(); + + public static final String GENERIC_SERIALIZATION_NATIVE_JAVA = "nativejava"; + + public static final String GENERIC_SERIALIZATION_DEFAULT = "true"; + + public static final String INVOKER_CONNECTED_KEY = "connected"; + + public static final String INVOKER_INSIDE_INVOKERS_KEY = "inside.invokers"; + + public static final String INVOKER_INSIDE_INVOKER_COUNT_KEY = "inside.invoker.count"; + + public static final String CLUSTER_SWITCH_FACTOR = "cluster.switch.factor"; + + public static final String CLUSTER_SWITCH_LOG_ERROR = "cluster.switch.log.error"; + + public static final double DEFAULT_CLUSTER_SWITCH_FACTOR = 2; + + public static final String DISPATHER_KEY = "dispather"; } diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java index 4c49bc1793..cfc5fb4b8b 100644 --- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java +++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java @@ -37,6 +37,7 @@ import java.util.concurrent.Future; import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; @Deprecated public class RpcContext { @@ -320,6 +321,25 @@ public class RpcContext { return isConsumerSide(); } + @Deprecated + public Invoker getInvoker() { + org.apache.dubbo.rpc.Invoker invoker = newRpcContext.getInvoker(); + if (invoker == null) { + return null; + } + return new Invoker.CompatibleInvoker<>(invoker); + } + + @Deprecated + public List> getInvokers() { + List> invokers = newRpcContext.getInvokers(); + if (CollectionUtils.isEmpty(invokers)) { + return Collections.emptyList(); + } + return invokers.stream() + .map(Invoker.CompatibleInvoker::new) + .collect(Collectors.toList()); + } /** * Async invocation. Timeout will be handled even if Future.get() is not called. * diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcException.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcException.java index 07923c6ee5..1e994019ac 100644 --- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcException.java +++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcException.java @@ -19,7 +19,7 @@ package com.alibaba.dubbo.rpc; @Deprecated public class RpcException extends org.apache.dubbo.rpc.RpcException { - + public RpcException() { super(); } @@ -51,4 +51,8 @@ public class RpcException extends org.apache.dubbo.rpc.RpcException { public RpcException(int code, Throwable cause) { super(code, cause); } + + public boolean isForbidded() { + return isForbidden(); + } } From e79e0214cb4c0121fd8370b4074ed3d8f23934f4 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Thu, 22 Jun 2023 14:30:06 +0800 Subject: [PATCH 19/21] Enhance register type of ServiceConfig (#12583) * Enhance register type of ServiceConfig * fix else --- .../common/constants/RegisterTypeEnum.java | 44 +++++++++ .../dubbo/config/ServiceConfigBase.java | 12 +-- .../apache/dubbo/config/ServiceConfig.java | 97 +++++++++++-------- .../config/deploy/DefaultModuleDeployer.java | 3 +- .../org/apache/dubbo/registry/Constants.java | 1 - 5 files changed, 110 insertions(+), 47 deletions(-) create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegisterTypeEnum.java diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegisterTypeEnum.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegisterTypeEnum.java new file mode 100644 index 0000000000..2aaeb929fc --- /dev/null +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegisterTypeEnum.java @@ -0,0 +1,44 @@ +/* + * 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.common.constants; + +/** + * Indicate that a service need to be registered to registry or not + */ +public enum RegisterTypeEnum { + + /** + * Never register. Cannot be registered by any command(like QoS-online). + */ + NEVER_REGISTER, + + /** + * Manual register. Can be registered by command(like QoS-online), but not register by default. + */ + MANUAL_REGISTER, + + /** + * (INTERNAL) Auto register by deployer. Will be registered after deployer started. + * (Delay publish when starting. Prevent service from being invoked before all services are started) + */ + AUTO_REGISTER_BY_DEPLOYER, + + /** + * Auto register. Will be registered when one service is exported. + */ + AUTO_REGISTER; +} diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java index 60c5c641ec..93279cf657 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java @@ -17,6 +17,7 @@ package org.apache.dubbo.config; import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.constants.RegisterTypeEnum; import org.apache.dubbo.common.utils.CollectionUtils; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.annotation.Service; @@ -417,7 +418,7 @@ public abstract class ServiceConfigBase extends AbstractServiceConfig { * export service and auto start application instance */ public final void export() { - export(true); + export(RegisterTypeEnum.AUTO_REGISTER); } public abstract void unexport(); @@ -429,10 +430,9 @@ public abstract class ServiceConfigBase extends AbstractServiceConfig { /** * Export service to network * - * @param register Whether register service to registry. If false, can be registered manually - * through the {@link ServiceConfigBase#register(boolean)} API. + * @param registerType register type of current export action. */ - public abstract void export(boolean register); + public abstract void export(RegisterTypeEnum registerType); /** * Register delay published service to registry. @@ -444,7 +444,7 @@ public abstract class ServiceConfigBase extends AbstractServiceConfig { /** * Register delay published service to registry. * - * @param onlyDefault only register those services that export with configured register false + * @param byDeployer register by deployer or not. */ - public abstract void register(boolean onlyDefault); + public abstract void register(boolean byDeployer); } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java index b22b0d2ab3..e3d3028a44 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java @@ -21,6 +21,7 @@ import org.apache.dubbo.common.URLBuilder; import org.apache.dubbo.common.Version; import org.apache.dubbo.common.config.ConfigurationUtils; import org.apache.dubbo.common.constants.CommonConstants; +import org.apache.dubbo.common.constants.RegisterTypeEnum; import org.apache.dubbo.common.extension.ExtensionLoader; import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; import org.apache.dubbo.common.logger.LoggerFactory; @@ -57,11 +58,14 @@ import java.beans.Transient; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeSet; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -99,7 +103,6 @@ import static org.apache.dubbo.config.Constants.DUBBO_PORT_TO_BIND; import static org.apache.dubbo.config.Constants.DUBBO_PORT_TO_REGISTRY; import static org.apache.dubbo.config.Constants.SCOPE_NONE; import static org.apache.dubbo.registry.Constants.REGISTER_KEY; -import static org.apache.dubbo.registry.Constants.REGISTER_ORIGIN_KEY; import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY; import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY; import static org.apache.dubbo.remoting.Constants.IS_PU_SERVER_KEY; @@ -149,7 +152,7 @@ public class ServiceConfig extends ServiceConfigBase { /** * The exported services */ - private final List> exporters = new ArrayList>(); + private final Map>> exporters = new ConcurrentHashMap<>(); private final List serviceListeners = new ArrayList<>(); @@ -197,19 +200,23 @@ public class ServiceConfig extends ServiceConfigBase { return; } if (!exporters.isEmpty()) { - for (Exporter exporter : exporters) { - try { - exporter.unregister(); - } catch (Throwable t) { - logger.warn(CONFIG_UNEXPORT_ERROR, "", "", "Unexpected error occurred when unexport " + exporter, t); + for (List> es : exporters.values()) { + for (Exporter exporter : es) { + try { + exporter.unregister(); + } catch (Throwable t) { + logger.warn(CONFIG_UNEXPORT_ERROR, "", "", "Unexpected error occurred when unexport " + exporter, t); + } } } waitForIdle(); - for (Exporter exporter : exporters) { - try { - exporter.unexport(); - } catch (Throwable t) { - logger.warn(CONFIG_UNEXPORT_ERROR, "", "", "Unexpected error occurred when unexport " + exporter, t); + for (List> es : exporters.values()) { + for (Exporter exporter : es) { + try { + exporter.unexport(); + } catch (Throwable t) { + logger.warn(CONFIG_UNEXPORT_ERROR, "", "", "Unexpected error occurred when unexport " + exporter, t); + } } } exporters.clear(); @@ -281,7 +288,7 @@ public class ServiceConfig extends ServiceConfigBase { } @Override - public void export(boolean register) { + public void export(RegisterTypeEnum registerType) { if (this.exported) { return; } @@ -302,16 +309,19 @@ public class ServiceConfig extends ServiceConfigBase { if (shouldDelay()) { // should register if delay export - doDelayExport(true); + doDelayExport(); + } else if (Integer.valueOf(-1).equals(getDelay())) { + // should not register by default + doExport(RegisterTypeEnum.MANUAL_REGISTER); } else { - doExport(register); + doExport(registerType); } } } } @Override - public void register(boolean onlyDefault) { + public void register(boolean byDeployer) { if (!this.exported) { return; } @@ -321,19 +331,23 @@ public class ServiceConfig extends ServiceConfigBase { return; } - for (Exporter exporter : exporters) { - if (!onlyDefault || exporter.getInvoker().getUrl().getParameter(REGISTER_ORIGIN_KEY, true)) { + for (Exporter exporter : exporters.getOrDefault(RegisterTypeEnum.AUTO_REGISTER, Collections.emptyList())) { + exporter.register(); + } + + if (byDeployer) { + for (Exporter exporter : exporters.getOrDefault(RegisterTypeEnum.AUTO_REGISTER_BY_DEPLOYER, Collections.emptyList())) { exporter.register(); } } } } - protected void doDelayExport(boolean register) { + protected void doDelayExport() { ExecutorRepository.getInstance(getScopeModel().getApplicationModel()).getServiceExportExecutor() .schedule(() -> { try { - doExport(register); + doExport(RegisterTypeEnum.AUTO_REGISTER); } catch (Exception e) { logger.error(CONFIG_FAILED_EXPORT_SERVICE, "configuration server disconnected", "", "Failed to (async)export service config: " + interfaceName, e); } @@ -460,7 +474,7 @@ public class ServiceConfig extends ServiceConfigBase { checkAndUpdateSubConfigs(); } - protected synchronized void doExport(boolean register) { + protected synchronized void doExport(RegisterTypeEnum registerType) { if (unexported) { throw new IllegalStateException("The service " + interfaceClass.getName() + " has already unexported!"); } @@ -471,12 +485,12 @@ public class ServiceConfig extends ServiceConfigBase { if (StringUtils.isEmpty(path)) { path = interfaceName; } - doExportUrls(register); + doExportUrls(registerType); exported(); } @SuppressWarnings({"unchecked", "rawtypes"}) - private void doExportUrls(boolean register) { + private void doExportUrls(RegisterTypeEnum registerType) { ModuleServiceRepository repository = getScopeModel().getServiceRepository(); ServiceDescriptor serviceDescriptor; final boolean serverService = ref instanceof ServerService; @@ -508,10 +522,10 @@ public class ServiceConfig extends ServiceConfigBase { .orElse(path), group, version); // stub service will use generated service name if (!serverService) { - // In case user specified path, register service one more time to map it to path. + // In case user specified path, registerImmediately service one more time to map it to path. repository.registerService(pathKey, interfaceClass); } - doExportUrlsFor1Protocol(protocolConfig, registryURLs, register); + doExportUrlsFor1Protocol(protocolConfig, registryURLs, registerType); } return null; } @@ -520,7 +534,7 @@ public class ServiceConfig extends ServiceConfigBase { providerModel.setServiceUrls(urls); } - private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List registryURLs, boolean register) { + private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List registryURLs, RegisterTypeEnum registerType) { Map map = buildAttributes(protocolConfig); // remove null key and null value @@ -532,7 +546,7 @@ public class ServiceConfig extends ServiceConfigBase { processServiceExecutor(url); - exportUrl(url, registryURLs, register); + exportUrl(url, registryURLs, registerType); } private void processServiceExecutor(URL url) { @@ -714,7 +728,7 @@ public class ServiceConfig extends ServiceConfigBase { return url; } - private void exportUrl(URL url, List registryURLs, boolean register) { + private void exportUrl(URL url, List registryURLs, RegisterTypeEnum registerType) { String scope = url.getParameter(SCOPE_KEY); // don't export when none is configured if (!SCOPE_NONE.equalsIgnoreCase(scope)) { @@ -738,7 +752,7 @@ public class ServiceConfig extends ServiceConfigBase { build(); } - url = exportRemote(url, registryURLs, register); + url = exportRemote(url, registryURLs, registerType); if (!isGeneric(generic) && !getScopeModel().isInternal()) { MetadataUtils.publishServiceDefinition(url, providerModel.getServiceModel(), getApplicationModel()); } @@ -753,7 +767,7 @@ public class ServiceConfig extends ServiceConfigBase { URL localUrl = URLBuilder.from(url). setProtocol(protocol). build(); - localUrl = exportRemote(localUrl, registryURLs, register); + localUrl = exportRemote(localUrl, registryURLs, registerType); if (!isGeneric(generic) && !getScopeModel().isInternal()) { MetadataUtils.publishServiceDefinition(localUrl, providerModel.getServiceModel(), getApplicationModel()); } @@ -765,8 +779,8 @@ public class ServiceConfig extends ServiceConfigBase { this.urls.add(url); } - private URL exportRemote(URL url, List registryURLs, boolean register) { - if (CollectionUtils.isNotEmpty(registryURLs)) { + private URL exportRemote(URL url, List registryURLs, RegisterTypeEnum registerType) { + if (CollectionUtils.isNotEmpty(registryURLs) && registerType != RegisterTypeEnum.NEVER_REGISTER) { for (URL registryURL : registryURLs) { if (SERVICE_REGISTRY_PROTOCOL.equals(registryURL.getProtocol())) { url = url.addParameterIfAbsent(SERVICE_NAME_MAPPING_KEY, "true"); @@ -797,7 +811,7 @@ public class ServiceConfig extends ServiceConfigBase { } } - doExportUrl(registryURL.putAttribute(EXPORT_KEY, url), true, register); + doExportUrl(registryURL.putAttribute(EXPORT_KEY, url), true, registerType); } } else { @@ -806,7 +820,7 @@ public class ServiceConfig extends ServiceConfigBase { logger.info("Export dubbo service " + interfaceClass.getName() + " to url " + url); } - doExportUrl(url, true, register); + doExportUrl(url, true, registerType); } @@ -814,17 +828,22 @@ public class ServiceConfig extends ServiceConfigBase { } @SuppressWarnings({"unchecked", "rawtypes"}) - private void doExportUrl(URL url, boolean withMetaData, boolean register) { - if (!register) { - url = url.addParameter(REGISTER_ORIGIN_KEY, url.getParameter(REGISTER_KEY, true)); + private void doExportUrl(URL url, boolean withMetaData, RegisterTypeEnum registerType) { + if (!url.getParameter(REGISTER_KEY, true)) { + registerType = RegisterTypeEnum.MANUAL_REGISTER; + } + if (registerType == RegisterTypeEnum.NEVER_REGISTER || + registerType == RegisterTypeEnum.MANUAL_REGISTER || + registerType == RegisterTypeEnum.AUTO_REGISTER_BY_DEPLOYER) { url = url.addParameter(REGISTER_KEY, false); } + Invoker invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, url); if (withMetaData) { invoker = new DelegateProviderMetaDataInvoker(invoker, this); } Exporter exporter = protocolSPI.export(invoker); - exporters.add(exporter); + exporters.computeIfAbsent(registerType, k -> new CopyOnWriteArrayList<>()).add(exporter); } @@ -840,7 +859,7 @@ public class ServiceConfig extends ServiceConfigBase { local = local.setScopeModel(getScopeModel()) .setServiceModel(providerModel); local = local.addParameter(EXPORTER_LISTENER_KEY, LOCAL_PROTOCOL); - doExportUrl(local, false, true); + doExportUrl(local, false, RegisterTypeEnum.AUTO_REGISTER); logger.info("Export dubbo service " + interfaceClass.getName() + " to local registry url : " + local); } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java index 004be0e224..9ddd1646da 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java @@ -18,6 +18,7 @@ package org.apache.dubbo.config.deploy; import org.apache.dubbo.common.config.ReferenceCache; import org.apache.dubbo.common.constants.LoggerCodeConstants; +import org.apache.dubbo.common.constants.RegisterTypeEnum; import org.apache.dubbo.common.deploy.AbstractDeployer; import org.apache.dubbo.common.deploy.ApplicationDeployer; import org.apache.dubbo.common.deploy.DeployListener; @@ -427,7 +428,7 @@ public class DefaultModuleDeployer extends AbstractDeployer impleme asyncExportingFutures.add(future); } else { if (!sc.isExported()) { - sc.export(false); + sc.export(RegisterTypeEnum.AUTO_REGISTER_BY_DEPLOYER); exportedServices.add(sc); } } diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java index be991b256e..d21534436c 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java @@ -21,7 +21,6 @@ public interface Constants { String REGISTER_IP_KEY = "register.ip"; String REGISTER_KEY = "register"; - String REGISTER_ORIGIN_KEY = "register_origin"; String SUBSCRIBE_KEY = "subscribe"; From 27d9ce383640359924f98a4ccb66fb6f3f3140d2 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Thu, 22 Jun 2023 19:31:31 +0800 Subject: [PATCH 20/21] Support get alibaba GenericService from spring context (#12585) --- .../dubbo/rpc/service/EchoService.java | 0 .../dubbo/rpc/service/GenericException.java | 36 ++--- .../dubbo/rpc/service/GenericService.java | 2 +- .../dubbo/config/ReferenceConfigBase.java | 2 +- .../dubbo/rpc/service/GenericException.java | 141 ++---------------- .../com/alibaba/dubbo/rpc/RpcInvocation.java | 1 + .../com/alibaba/dubbo/rpc/RpcException.java | 0 .../org/apache/dubbo/rpc/AppResponse.java | 7 + .../dubbo/rpc/filter/GenericFilter.java | 4 +- 9 files changed, 31 insertions(+), 162 deletions(-) rename {dubbo-rpc/dubbo-rpc-api => dubbo-common}/src/main/java/com/alibaba/dubbo/rpc/service/EchoService.java (100%) rename {dubbo-rpc/dubbo-rpc-api => dubbo-common}/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java (58%) rename {dubbo-rpc/dubbo-rpc-api => dubbo-common}/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java (93%) rename {dubbo-compatible => dubbo-rpc/dubbo-rpc-api}/src/main/java/com/alibaba/dubbo/rpc/RpcException.java (100%) diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/service/EchoService.java b/dubbo-common/src/main/java/com/alibaba/dubbo/rpc/service/EchoService.java similarity index 100% rename from dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/service/EchoService.java rename to dubbo-common/src/main/java/com/alibaba/dubbo/rpc/service/EchoService.java diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java b/dubbo-common/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java similarity index 58% rename from dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java rename to dubbo-common/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java index 1a94cebf4f..0d5ac6fed2 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java @@ -17,46 +17,28 @@ package com.alibaba.dubbo.rpc.service; -import org.apache.dubbo.common.utils.StringUtils; @Deprecated -public class GenericException extends RuntimeException { +public class GenericException extends org.apache.dubbo.rpc.service.GenericException { private static final long serialVersionUID = -1182299763306599962L; - private String exceptionClass; - - private String exceptionMessage; - public GenericException() { } - public GenericException(String exceptionClass, String exceptionMessage) { + public GenericException(String exceptionMessage) { super(exceptionMessage); - this.exceptionClass = exceptionClass; - this.exceptionMessage = exceptionMessage; + } + + public GenericException(String exceptionClass, String exceptionMessage) { + super(exceptionClass, exceptionMessage); } public GenericException(Throwable cause) { - super(StringUtils.toString(cause)); - this.exceptionClass = cause.getClass().getName(); - this.exceptionMessage = cause.getMessage(); + super(cause); } - public String getExceptionClass() { - return exceptionClass; + public GenericException(String message, Throwable cause, String exceptionClass, String exceptionMessage) { + super(message, cause, exceptionClass, exceptionMessage); } - - public void setExceptionClass(String exceptionClass) { - this.exceptionClass = exceptionClass; - } - - public String getExceptionMessage() { - return exceptionMessage; - } - - public void setExceptionMessage(String exceptionMessage) { - this.exceptionMessage = exceptionMessage; - } - } diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java b/dubbo-common/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java similarity index 93% rename from dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java rename to dubbo-common/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java index b63b60bd3e..cc3282a7a0 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java @@ -22,5 +22,5 @@ public interface GenericService extends org.apache.dubbo.rpc.service.GenericServ @Override Object $invoke(String method, String[] parameterTypes, Object[] args) - throws com.alibaba.dubbo.rpc.service.GenericException; + throws GenericException; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java index 4b41ea2786..e2115e5cde 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java @@ -227,7 +227,7 @@ public abstract class ReferenceConfigBase extends AbstractReferenceConfig { public static Class determineInterfaceClass(String generic, String interfaceName, ClassLoader classLoader) { if (ProtocolUtils.isGeneric(generic)) { - return GenericService.class; + return com.alibaba.dubbo.rpc.service.GenericService.class; } try { if (StringUtils.isNotEmpty(interfaceName)) { diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/service/GenericException.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/service/GenericException.java index 23f8add206..39860701f6 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/service/GenericException.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/service/GenericException.java @@ -16,12 +16,8 @@ */ package org.apache.dubbo.rpc.service; -import org.apache.dubbo.common.utils.JsonUtils; import org.apache.dubbo.common.utils.StringUtils; -import java.beans.Transient; -import java.io.Serializable; - /** * GenericException * @@ -31,169 +27,50 @@ public class GenericException extends RuntimeException { private static final long serialVersionUID = -1182299763306599962L; - private boolean useCause; - private String exceptionClass; private String exceptionMessage; - private final GenericExceptionInfo genericExceptionInfo; - public GenericException() { - this(null, null); + } + + public GenericException(String exceptionMessage) { + super(exceptionMessage); + this.exceptionMessage = exceptionMessage; } public GenericException(String exceptionClass, String exceptionMessage) { super(exceptionMessage); - this.useCause = false; this.exceptionClass = exceptionClass; this.exceptionMessage = exceptionMessage; - this.genericExceptionInfo = new GenericExceptionInfo(exceptionClass, exceptionMessage, exceptionMessage, getStackTrace()); } public GenericException(Throwable cause) { super(StringUtils.toString(cause)); - this.useCause = false; this.exceptionClass = cause.getClass().getName(); this.exceptionMessage = cause.getMessage(); - this.genericExceptionInfo = new GenericExceptionInfo(this.exceptionClass, this.exceptionMessage, super.getMessage(), getStackTrace()); } - protected GenericException(GenericExceptionInfo info) { - super(info.getMsg(), null, true, false); - setStackTrace(info.getStackTrace()); - this.useCause = false; - this.exceptionClass = info.getExClass(); - this.exceptionMessage = info.getExMsg(); - this.genericExceptionInfo = info; + public GenericException(String message, Throwable cause, String exceptionClass, String exceptionMessage) { + super(message, cause); + this.exceptionClass = exceptionClass; + this.exceptionMessage = exceptionMessage; } - @Transient public String getExceptionClass() { - if(this.useCause) { - return ((GenericException)getCause()).getExceptionClass(); - } return exceptionClass; } - public void setExceptionClass(String exceptionClass) { - if(this.useCause) { - ((GenericException)getCause()).setExceptionClass(exceptionClass); - return; - } this.exceptionClass = exceptionClass; } - @Transient public String getExceptionMessage() { - if(this.useCause) { - return ((GenericException)getCause()).getExceptionMessage(); - } return exceptionMessage; } public void setExceptionMessage(String exceptionMessage) { - if(this.useCause) { - ((GenericException)getCause()).setExceptionMessage(exceptionMessage); - return; - } this.exceptionMessage = exceptionMessage; } - @Override - @Transient - public StackTraceElement[] getStackTrace() { - if(this.useCause) { - return ((GenericException)getCause()).getStackTrace(); - } - return super.getStackTrace(); - } - - @Override - @Transient - public String getMessage() { - if(this.useCause) { - return getCause().getMessage(); - } - return JsonUtils.toJson(GenericExceptionInfo.createNoStackTrace(genericExceptionInfo)); - } - - public String getGenericException() { - if(this.useCause) { - return ((GenericException)getCause()).getGenericException(); - } - return JsonUtils.toJson(genericExceptionInfo); - } - - public void setGenericException(String json) { - GenericExceptionInfo info = JsonUtils.toJavaObject(json, GenericExceptionInfo.class); - if(info == null) { - return; - } - this.useCause = true; - initCause(new GenericException(info)); - } - - @Override - @Transient - public String getLocalizedMessage() { - return getMessage(); - } - - /** - * create generic exception info - */ - public static class GenericExceptionInfo implements Serializable { - private String exClass; - private String exMsg; - private String msg; - private StackTraceElement[] stackTrace; - - public GenericExceptionInfo() { - } - - public GenericExceptionInfo(String exceptionClass, String exceptionMessage, String message, StackTraceElement[] stackTrace) { - this.exClass = exceptionClass; - this.exMsg = exceptionMessage; - this.msg = message; - this.stackTrace = stackTrace; - } - - public static GenericExceptionInfo createNoStackTrace(GenericExceptionInfo info) { - return new GenericExceptionInfo(info.getExClass(), info.getExMsg(), info.getMsg(), null); - } - - public String getMsg() { - return msg; - } - - public String getExClass() { - return exClass; - } - - public String getExMsg() { - return exMsg; - } - - public void setExClass(String exClass) { - this.exClass = exClass; - } - - public void setExMsg(String exMsg) { - this.exMsg = exMsg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public StackTraceElement[] getStackTrace() { - return stackTrace; - } - - public void setStackTrace(StackTraceElement[] stackTrace) { - this.stackTrace = stackTrace; - } - } } diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java index d1cf40600d..7206210ceb 100644 --- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java +++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java @@ -28,6 +28,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +@Deprecated public class RpcInvocation implements Invocation, Serializable { private static final long serialVersionUID = -4355285085441097045L; diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcException.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/RpcException.java similarity index 100% rename from dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/RpcException.java rename to dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/RpcException.java diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java index 700d49b2f7..8a2089ed20 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java @@ -85,6 +85,13 @@ public class AppResponse implements Result { } catch (Exception e) { // ignore } + if ((exception instanceof RpcException) && !(exception instanceof com.alibaba.dubbo.rpc.RpcException)) { + com.alibaba.dubbo.rpc.RpcException recreated = + new com.alibaba.dubbo.rpc.RpcException(((RpcException) exception).getCode(), + exception.getMessage(), exception.getCause()); + recreated.setStackTrace(exception.getStackTrace()); + throw recreated; + } throw exception; } return result; diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericFilter.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericFilter.java index 00f23815cd..8375298508 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericFilter.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericFilter.java @@ -235,7 +235,9 @@ public class GenericFilter implements Filter, Filter.Listener, ScopeModelAware { Throwable appException = appResponse.getException(); if (appException instanceof GenericException) { GenericException tmp = (GenericException) appException; - appException = new com.alibaba.dubbo.rpc.service.GenericException(tmp.getExceptionClass(), tmp.getExceptionMessage()); + appException = new com.alibaba.dubbo.rpc.service.GenericException(tmp.getMessage(), tmp.getCause(), + tmp.getExceptionClass(), tmp.getExceptionMessage()); + appException.setStackTrace(tmp.getStackTrace()); } if (!(appException instanceof com.alibaba.dubbo.rpc.service.GenericException)) { appException = new com.alibaba.dubbo.rpc.service.GenericException(appException); From 2c82cf7dfccd435be7f8de7346a937a27f2d0a9a Mon Sep 17 00:00:00 2001 From: wxbty <38374721+wxbty@users.noreply.github.com> Date: Sat, 24 Jun 2023 17:02:15 +0800 Subject: [PATCH 21/21] Use serviceKey when to metadata ServiceSubscribeEvent (#12586) --- .../dubbo/metadata/report/identifier/MetadataIdentifier.java | 4 ++++ .../dubbo/metadata/report/support/AbstractMetadataReport.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java index b035a4fcea..9ce637f2ad 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java @@ -97,4 +97,8 @@ public class MetadataIdentifier extends BaseServiceMetadataIdentifier implements this.application = application; } + public String getUniqueServiceName() { + return serviceInterface != null ? URL.buildKey(serviceInterface, getGroup(), getVersion()) : null; + } + } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java index dbfd78dc55..1c26581a95 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java @@ -279,7 +279,7 @@ public abstract class AbstractMetadataReport implements MetadataReport { private void storeProviderMetadataTask(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) { - MetadataEvent metadataEvent = MetadataEvent.toServiceSubscribeEvent(applicationModel, serviceDefinition.getCanonicalName()); + MetadataEvent metadataEvent = MetadataEvent.toServiceSubscribeEvent(applicationModel, providerMetadataIdentifier.getUniqueServiceName()); MetricsEventBus.post(metadataEvent, () -> { boolean result = true;