This is an automated email from the ASF dual-hosted git repository. albumenj pushed a commit to branch 3.0.2.1-release in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 2b4d4570dcdb8a57acd1e49e81e57b53157281e1 Author: Albumen Kevin <[email protected]> AuthorDate: Thu Aug 19 19:00:55 2021 +0800 Compact with dubbo-all without farbic-io (#8546) --- .../cluster/router/mesh/route/MeshEnvListener.java | 3 -- ...nvListener.java => MeshEnvListenerFactory.java} | 18 ++-------- .../cluster/router/mesh/route/MeshRuleManager.java | 5 ++- dubbo-distribution/dubbo-all/pom.xml | 6 ++++ .../KubernetesMeshEnvListenerFactory.java | 42 ++++++++++++++++++++++ ...uster.router.mesh.route.MeshEnvListenerFactory} | 2 +- 6 files changed, 55 insertions(+), 21 deletions(-) diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListener.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListener.java index 4b92457..6d98534 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListener.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListener.java @@ -17,13 +17,10 @@ package org.apache.dubbo.rpc.cluster.router.mesh.route; -import org.apache.dubbo.common.extension.SPI; - /** * Mesh Rule Listener * Such as Kubernetes, Service Mesh (xDS) environment support define rule in env */ -@SPI public interface MeshEnvListener { /** * @return whether current environment support listen diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListener.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListenerFactory.java similarity index 69% copy from dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListener.java copy to dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListenerFactory.java index 4b92457..5299506 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListener.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshEnvListenerFactory.java @@ -14,25 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.dubbo.rpc.cluster.router.mesh.route; import org.apache.dubbo.common.extension.SPI; -/** - * Mesh Rule Listener - * Such as Kubernetes, Service Mesh (xDS) environment support define rule in env - */ @SPI -public interface MeshEnvListener { - /** - * @return whether current environment support listen - */ - default boolean isEnable() { - return false; - } - - void onSubscribe(String appName, MeshAppRuleListener listener); - - void onUnSubscribe(String appName); +public interface MeshEnvListenerFactory { + MeshEnvListener getListener(); } diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleManager.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleManager.java index 87fdede..b07fede 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleManager.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleManager.java @@ -24,8 +24,10 @@ import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.rpc.model.ApplicationModel; import java.util.Collection; +import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; public final class MeshRuleManager { @@ -43,7 +45,8 @@ public final class MeshRuleManager { DynamicConfiguration configuration = ApplicationModel.getEnvironment().getDynamicConfiguration() .orElse(null); - Set<MeshEnvListener> envListeners = ExtensionLoader.getExtensionLoader(MeshEnvListener.class).getSupportedExtensionInstances(); + Set<MeshEnvListenerFactory> envListenerFactories = ExtensionLoader.getExtensionLoader(MeshEnvListenerFactory.class).getSupportedExtensionInstances(); + Set<MeshEnvListener> envListeners = envListenerFactories.stream().map(MeshEnvListenerFactory::getListener).filter(Objects::nonNull).collect(Collectors.toSet()); if (configuration == null && envListeners.stream().noneMatch(MeshEnvListener::isEnable)) { logger.warn("Doesn't support Configuration!"); diff --git a/dubbo-distribution/dubbo-all/pom.xml b/dubbo-distribution/dubbo-all/pom.xml index be8d15d..1152748 100644 --- a/dubbo-distribution/dubbo-all/pom.xml +++ b/dubbo-distribution/dubbo-all/pom.xml @@ -777,6 +777,12 @@ META-INF/dubbo/internal/org.apache.dubbo.common.url.component.param.DynamicParamSource </resource> </transformer> + <transformer + implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> + <resource> + META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListenerFactory + </resource> + </transformer> </transformers> <filters> <filter> diff --git a/dubbo-registry/dubbo-registry-kubernetes/src/main/java/org/apache/dubbo/registry/kubernetes/KubernetesMeshEnvListenerFactory.java b/dubbo-registry/dubbo-registry-kubernetes/src/main/java/org/apache/dubbo/registry/kubernetes/KubernetesMeshEnvListenerFactory.java new file mode 100644 index 0000000..67b1b4c --- /dev/null +++ b/dubbo-registry/dubbo-registry-kubernetes/src/main/java/org/apache/dubbo/registry/kubernetes/KubernetesMeshEnvListenerFactory.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.kubernetes; + +import org.apache.dubbo.common.logger.Logger; +import org.apache.dubbo.common.logger.LoggerFactory; +import org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListener; +import org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListenerFactory; + +import java.util.concurrent.atomic.AtomicBoolean; + +public class KubernetesMeshEnvListenerFactory implements MeshEnvListenerFactory { + public static final Logger logger = LoggerFactory.getLogger(KubernetesMeshEnvListenerFactory.class); + private final AtomicBoolean initialized = new AtomicBoolean(false); + private MeshEnvListener listener = null; + + @Override + public MeshEnvListener getListener() { + try { + if (initialized.compareAndSet(false, true)) { + listener = new KubernetesMeshEnvListener(); + } + } catch (Throwable t) { + logger.info("Current Env not support Kubernetes."); + } + return listener; + } +} diff --git a/dubbo-registry/dubbo-registry-kubernetes/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListener b/dubbo-registry/dubbo-registry-kubernetes/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListenerFactory similarity index 79% rename from dubbo-registry/dubbo-registry-kubernetes/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListener rename to dubbo-registry/dubbo-registry-kubernetes/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListenerFactory index b44c869..4dfae84 100644 --- a/dubbo-registry/dubbo-registry-kubernetes/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListener +++ b/dubbo-registry/dubbo-registry-kubernetes/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.router.mesh.route.MeshEnvListenerFactory @@ -1 +1 @@ -kubernetes=org.apache.dubbo.registry.kubernetes.KubernetesMeshEnvListener +kubernetes=org.apache.dubbo.registry.kubernetes.KubernetesMeshEnvListenerFactory
