From 0df5492a0ef9631991347a6d262834c2d2703b77 Mon Sep 17 00:00:00 2001 From: liaochuntao Date: Fri, 19 Jan 2024 11:45:54 +0800 Subject: [PATCH 01/17] =?UTF-8?q?fix:=E4=BC=98=E5=8C=96dubbo=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E7=BA=A7=E6=B3=A8=E5=86=8C=E5=8F=91=E7=8E=B0=E7=9A=84?= =?UTF-8?q?=E5=86=85=E5=AD=98=E4=BD=BF=E7=94=A8=20(#40)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dubbox/registry/PolarisRegistry.java | 232 ++++++++++++++++++ dubbox/pom.xml | 34 +++ 2 files changed, 266 insertions(+) create mode 100644 dubbox/dubbox-plugins/dubbox-registry-polaris/src/main/java/com/tencent/polaris/dubbox/registry/PolarisRegistry.java create mode 100644 dubbox/pom.xml diff --git a/dubbox/dubbox-plugins/dubbox-registry-polaris/src/main/java/com/tencent/polaris/dubbox/registry/PolarisRegistry.java b/dubbox/dubbox-plugins/dubbox-registry-polaris/src/main/java/com/tencent/polaris/dubbox/registry/PolarisRegistry.java new file mode 100644 index 0000000..5995ce2 --- /dev/null +++ b/dubbox/dubbox-plugins/dubbox-registry-polaris/src/main/java/com/tencent/polaris/dubbox/registry/PolarisRegistry.java @@ -0,0 +1,232 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed 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 com.tencent.polaris.dubbox.registry; + +import com.alibaba.dubbo.common.Constants; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.extension.ExtensionLoader; +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.dubbo.common.utils.ConcurrentHashSet; +import com.alibaba.dubbo.registry.NotifyListener; +import com.alibaba.dubbo.registry.support.FailbackRegistry; +import com.alibaba.dubbo.rpc.Filter; +import com.alibaba.dubbo.rpc.cluster.RouterFactory; +import com.tencent.polaris.api.exception.PolarisException; +import com.tencent.polaris.api.listener.ServiceListener; +import com.tencent.polaris.api.pojo.Instance; +import com.tencent.polaris.api.pojo.ServiceChangeEvent; +import com.tencent.polaris.api.utils.StringUtils; +import com.tencent.polaris.common.registry.Consts; +import com.tencent.polaris.common.registry.ConvertUtils; +import com.tencent.polaris.common.registry.PolarisOperator; +import com.tencent.polaris.common.registry.PolarisOperators; +import com.tencent.polaris.common.utils.ExtensionConsts; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import static com.alibaba.dubbo.common.Constants.CATEGORY_KEY; +import static com.alibaba.dubbo.common.Constants.DEFAULT_CATEGORY; +import static com.alibaba.dubbo.common.Constants.EMPTY_PROTOCOL; +import static com.alibaba.dubbo.common.Constants.PATH_KEY; + +public class PolarisRegistry extends FailbackRegistry { + + private static final Logger LOGGER = LoggerFactory.getLogger(PolarisRegistry.class); + + private final Set registeredInstances = new ConcurrentHashSet<>(); + + private final AtomicBoolean destroyed = new AtomicBoolean(false); + + private final Map> dubboListeners = new ConcurrentHashMap<>(); + + private final Map serviceListeners = new ConcurrentHashMap<>(); + + private final PolarisOperator polarisOperator; + + public PolarisRegistry(URL url) { + super(url); + polarisOperator = PolarisOperators.INSTANCE.loadOrStore(url.getHost(), url.getPort(), url.getParameters()); + } + + @Override + public void doRegister(URL url) { + if (!shouldRegister(url)) { + return; + } + LOGGER.info("[POLARIS] register service to polaris: {}", url.toString()); + Map metadata = new HashMap<>(url.getParameters()); + metadata.put(PATH_KEY, url.getPath()); + int port = url.getPort(); + if (port > 0) { + int weight = url.getParameter(Constants.WEIGHT_KEY, Constants.DEFAULT_WEIGHT); + String version = url.getParameter(Constants.VERSION_KEY, ""); + polarisOperator.register(url.getServiceInterface(), url.getHost(), port, url.getProtocol(), version, weight, + metadata); + registeredInstances.add(url); + } else { + LOGGER.warn("[POLARIS] skip register url {} for zero port value", url); + } + } + + private boolean shouldRegister(URL url) { + return !StringUtils.equals(url.getProtocol(), Constants.CONSUMER); + } + + @Override + public void doUnregister(URL url) { + if (!shouldRegister(url)) { + return; + } + LOGGER.info("[POLARIS] unregister service from polaris: {}", url.toString()); + int port = url.getPort(); + if (port > 0) { + polarisOperator.deregister(url.getServiceInterface(), url.getHost(), url.getPort()); + registeredInstances.remove(url); + } + } + + @Override + public void destroy() { + if (destroyed.compareAndSet(false, true)) { + super.destroy(); + Collection urls = Collections.unmodifiableCollection(registeredInstances); + for (URL url : urls) { + doUnregister(url); + } + polarisOperator.destroy(); + } + } + + @Override + public void doSubscribe(URL url, NotifyListener listener) { + String service = url.getServiceInterface(); + Instance[] instances = polarisOperator.getAvailableInstances(service, true); + onInstances(url, listener, instances); + LOGGER.info("[POLARIS] submit watch task for service {}", service); + + dubboListeners.computeIfAbsent(url, s -> new ConcurrentHashSet<>()); + dubboListeners.get(url).add(listener); + + serviceListeners.computeIfAbsent(url, dubboUrl -> { + ServiceListener serviceListener = new DubboServiceListener(url, this); + polarisOperator.watchService(service, serviceListener); + return serviceListener; + }); + } + + private void onInstances(URL url, NotifyListener listener, Instance[] instances) { + LOGGER.info("[POLARIS] update instances count: {}, service: {}", null == instances ? 0 : instances.length, + url.getServiceInterface()); + List urls = new ArrayList<>(); + if (null != instances) { + for (Instance instance : instances) { + urls.add(instanceToURL(instance)); + } + } + notify(url, listener, toUrlWithEmpty(url, urls)); + } + + private static URL instanceToURL(Instance instance) { + Map newMetadata = new HashMap<>(instance.getMetadata()); + boolean hasWeight = false; + if (newMetadata.containsKey(Constants.WEIGHT_KEY)) { + String weightStr = newMetadata.get(Constants.WEIGHT_KEY); + try { + int weightValue = Integer.parseInt(weightStr); + if (weightValue == instance.getWeight()) { + hasWeight = true; + } + } catch (Exception ignored) { + } + } + if (!hasWeight) { + newMetadata.put(Constants.WEIGHT_KEY, Integer.toString(instance.getWeight())); + } + newMetadata.put(Consts.INSTANCE_KEY_ID, instance.getId()); + newMetadata.put(Consts.INSTANCE_KEY_HEALTHY, Boolean.toString(instance.isHealthy())); + newMetadata.put(Consts.INSTANCE_KEY_ISOLATED, Boolean.toString(instance.isIsolated())); + newMetadata.put(Consts.INSTANCE_KEY_CIRCUIT_BREAKER, ConvertUtils.circuitBreakersToString(instance)); + return new URL(instance.getProtocol(), + instance.getHost(), + instance.getPort(), + newMetadata.get(PATH_KEY), + newMetadata); + } + + private List toUrlWithEmpty(URL providerUrl, List urls) { + if (CollectionUtils.isEmpty(urls)) { + LOGGER.warn("[POLARIS] received empty url address list, will clear current available addresses"); + URL empty = providerUrl + .setProtocol(EMPTY_PROTOCOL) + .addParameter(CATEGORY_KEY, DEFAULT_CATEGORY); + urls.add(empty); + } + return urls; + } + + @Override + public void doUnsubscribe(URL url, NotifyListener listener) { + LOGGER.info("[polaris] unsubscribe service: {}", url.toString()); + ServiceListener serviceListener = serviceListeners.get(listener); + if (serviceListener != null) { + polarisOperator.unwatchService(url.getServiceInterface(), serviceListener); + } + } + + @Override + public boolean isAvailable() { + return true; + } + + private static class DubboServiceListener implements ServiceListener { + + private final URL url; + + private final String service; + + private final PolarisRegistry registry; + + private DubboServiceListener(URL url, PolarisRegistry registry) { + this.url = url; + this.service = url.getServiceInterface(); + this.registry = registry; + } + + @Override + public void onEvent(ServiceChangeEvent serviceChangeEvent) { + try { + Set listeners = registry.dubboListeners.getOrDefault(url, Collections.emptySet()); + Instance[] curInstances = registry.polarisOperator.getAvailableInstances(service, true); + for (NotifyListener listener : listeners) { + registry.onInstances(url, listener, curInstances); + } + } catch (PolarisException e) { + LOGGER.error("[POLARIS] fail to fetch instances for service {}: {}", service, e.toString()); + } + } + } +} diff --git a/dubbox/pom.xml b/dubbox/pom.xml new file mode 100644 index 0000000..d184e22 --- /dev/null +++ b/dubbox/pom.xml @@ -0,0 +1,34 @@ + + + + dubbo-java-polaris + com.tencent.polaris + ${revision} + ../pom.xml + + 4.0.0 + + dubbox + pom + + + 2.6.9 + + + + dubbox-plugins + dubbox-examples + + + + + + com.alibaba + dubbo + ${alibaba.dubbo.version} + + + + \ No newline at end of file From 2339f5734196dba9f14456f69e919a405440439a Mon Sep 17 00:00:00 2001 From: liaochuntao Date: Tue, 16 Jan 2024 23:45:10 +0800 Subject: [PATCH 02/17] feat:support dubbo3.2.x (#37) --- .../dubbo-quick-consumer/pom.xml | 18 -------- .../discovery/example/consumer/Main.java | 1 + .../dubbo-quick-provider/pom.xml | 25 ++++------- .../dubbo-governance-example/pom.xml | 21 ---------- .../provider/AnnotatedGreetingService.java | 36 ---------------- .../example/provider/api/PressAPI001.java | 27 ------------ .../dubbo-press-example/pom.xml | 20 --------- dubbo/dubbo-examples/pom.xml | 3 -- .../CircuitBreakerCallback.java | 29 ------------- .../PolarisDynamicConfiguration.java | 2 +- .../dubbo/ratelimit/RateLimitFilter.java | 4 +- .../dubbo/registry/PolarisRegistry.java | 4 +- .../registry/PolarisServiceDiscovery.java | 2 +- .../polaris/dubbo/router/PolarisRouter.java | 42 ++++++------------- .../common/registry/DubboServiceInfo.java | 4 +- .../common/registry/PolarisConfig.java | 7 +--- .../common/registry/PolarisOperator.java | 2 +- .../registry/PolarisOperatorDelegate.java | 2 +- pom.xml | 4 +- 19 files changed, 35 insertions(+), 218 deletions(-) delete mode 100644 dubbo/dubbo-examples/dubbo-governance-example/pom.xml delete mode 100644 dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/AnnotatedGreetingService.java delete mode 100644 dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/api/PressAPI001.java delete mode 100644 dubbo/dubbo-examples/dubbo-press-example/pom.xml delete mode 100644 dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerCallback.java diff --git a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/pom.xml b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/pom.xml index 4daa220..fa9d2b0 100644 --- a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/pom.xml +++ b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/pom.xml @@ -124,24 +124,6 @@ - - META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter - - - META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory - - - META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory - - - META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory - - - META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory - - - META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory - com.tencent.polaris.dubbo.discovery.example.consumer.Main diff --git a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/Main.java b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/Main.java index cb54f66..2bd536e 100644 --- a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/Main.java +++ b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/Main.java @@ -44,6 +44,7 @@ public static void main(String[] args) throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConsumerConfiguration.class); context.start(); GreetingServiceConsumer greetingServiceConsumer = context.getBean(GreetingServiceConsumer.class); + System.out.println("please input name"); HttpServer server = HttpServer.create(new InetSocketAddress(LISTEN_PORT), 0); server.createContext(PATH, new EchoClientHandler(greetingServiceConsumer)); diff --git a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml index 8686bba..8ad3238 100644 --- a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml +++ b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml @@ -84,6 +84,13 @@ ${revision} + + + com.tencent.polaris + dubbo-ratelimit-polaris + ${revision} + + org.apache.logging.log4j log4j-slf4j-impl @@ -127,24 +134,6 @@ - - META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter - - - META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory - - - META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory - - - META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory - - - META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory - - - META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory - com.tencent.polaris.dubbo.discovery.example.provider.Main diff --git a/dubbo/dubbo-examples/dubbo-governance-example/pom.xml b/dubbo/dubbo-examples/dubbo-governance-example/pom.xml deleted file mode 100644 index 25642ce..0000000 --- a/dubbo/dubbo-examples/dubbo-governance-example/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - dubbo-examples - com.tencent.polaris - ${revision} - ../pom.xml - - 4.0.0 - dubbo-governance-example - - pom - - - dubbo-governance-provider - dubbo-governance-consumer - - - \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/AnnotatedGreetingService.java b/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/AnnotatedGreetingService.java deleted file mode 100644 index 286b31d..0000000 --- a/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/AnnotatedGreetingService.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Polaris available. - * - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * 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 com.tencent.polaris.press.example.provider; - -import com.tencent.polaris.dubbo.example.api.GreetingService; -import org.apache.dubbo.config.annotation.DubboService; - -@DubboService(version = "1.0.0") -public class AnnotatedGreetingService implements GreetingService { - - @Override - public String sayHello(String name) { - return "hello, " + name + ", source from " + System.getenv("POD_IP"); - } - - @Override - public String sayHi(String name) { - return "[provider by polaris] hi, " + name + ", source from " + System.getenv("POD_IP"); - } - -} \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/api/PressAPI001.java b/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/api/PressAPI001.java deleted file mode 100644 index 1c2e8df..0000000 --- a/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/api/PressAPI001.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Polaris available. - * - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * 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 com.tencent.polaris.press.example.provider.api; - -public interface PressAPI001 { - - String sayHello(String name); - - String sayHi(String name); - -} diff --git a/dubbo/dubbo-examples/dubbo-press-example/pom.xml b/dubbo/dubbo-examples/dubbo-press-example/pom.xml deleted file mode 100644 index 1f09822..0000000 --- a/dubbo/dubbo-examples/dubbo-press-example/pom.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - dubbo-examples - com.tencent.polaris - ${revision} - ../pom.xml - - 4.0.0 - dubbo-press-example - - pom - - - dubbo-press-provider - - - \ No newline at end of file diff --git a/dubbo/dubbo-examples/pom.xml b/dubbo/dubbo-examples/pom.xml index cfbae10..928f1f1 100644 --- a/dubbo/dubbo-examples/pom.xml +++ b/dubbo/dubbo-examples/pom.xml @@ -20,9 +20,6 @@ dubbo-api-example dubbo-discovery-example - dubbo-press-example - dubbo-governance-example - dubbo-router-example diff --git a/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerCallback.java b/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerCallback.java deleted file mode 100644 index 326018a..0000000 --- a/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerCallback.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Polaris available. - * - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * 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 com.tencent.polaris.dubbo.circuitbreaker; - -import com.tencent.polaris.circuitbreak.client.exception.CallAbortedException; -import org.apache.dubbo.rpc.Invocation; -import org.apache.dubbo.rpc.Invoker; -import org.apache.dubbo.rpc.Result; - -public interface CircuitBreakerCallback { - - Result onCircuitBreaker(Invoker invoker, Invocation invocation, CallAbortedException exception); - -} diff --git a/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java b/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java index 8f4eaba..4c97b76 100644 --- a/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java +++ b/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java @@ -55,7 +55,7 @@ public class PolarisDynamicConfiguration implements DynamicConfiguration { private Map> listeners = new ConcurrentHashMap<>(); PolarisDynamicConfiguration(URL url) { - this.operator = PolarisOperators.loadOrStoreForConfig(url.getHost(), url.getPort(), url.getParameters()); + this.operator = PolarisOperators.INSTANCE.loadOrStoreForConfig(url.getHost(), url.getPort(), url.getParameters()); this.polarisConfig = operator.getPolarisConfig(); this.fileQuerier = operator.getConfigFileAPI(); this.filePublisher = operator.getConfigFilePublishAPI(); diff --git a/dubbo/dubbo-plugins/dubbo-ratelimit-polaris/src/main/java/com/tencent/polaris/dubbo/ratelimit/RateLimitFilter.java b/dubbo/dubbo-plugins/dubbo-ratelimit-polaris/src/main/java/com/tencent/polaris/dubbo/ratelimit/RateLimitFilter.java index 9807fab..3d54103 100644 --- a/dubbo/dubbo-plugins/dubbo-ratelimit-polaris/src/main/java/com/tencent/polaris/dubbo/ratelimit/RateLimitFilter.java +++ b/dubbo/dubbo-plugins/dubbo-ratelimit-polaris/src/main/java/com/tencent/polaris/dubbo/ratelimit/RateLimitFilter.java @@ -80,7 +80,7 @@ public Result invoke(Invoker invoker, Invocation invocation) throws RpcExcept if (null == polarisOperator) { return invoker.invoke(invocation); } - List serviceInfos = DubboUtils.analyzeLocalDubboServiceInfo(applicationModel, invoker, invocation); + List serviceInfos = DubboUtils.analyzeDubboServiceInfo(applicationModel, invoker, invocation); for (DubboServiceInfo serviceInfo : serviceInfos) { checkRateLimit(invoker, invocation, serviceInfo); } @@ -117,7 +117,7 @@ private void checkRateLimit(Invoker invoker, Invocation invocation, DubboServ } QuotaResponse quotaResponse = null; try { - quotaResponse = operator.getQuota(serviceInfo.getService(), serviceInfo.getDubboInterface(), arguments); + quotaResponse = operator.getQuota(serviceInfo.getService(), serviceInfo.getReportMethodName(), arguments); } catch (PolarisException e) { Map externalParam = new HashMap<>(); externalParam.put("serviceInfo", serviceInfo); diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java index f904341..d9c8c3d 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java @@ -65,7 +65,7 @@ public class PolarisRegistry extends FailbackRegistry { public PolarisRegistry(URL url) { super(url); - polarisOperator = PolarisOperators.loadOrStoreForGovernance(url.getHost(), url.getPort(), url.getParameters()); + polarisOperator = PolarisOperators.INSTANCE.loadOrStoreForGovernance(url.getHost(), url.getPort(), url.getParameters()); } @Override @@ -89,7 +89,7 @@ public void doRegister(URL url) { } private boolean shouldRegister(URL url) { - return StringUtils.equals(url.getSide(), CommonConstants.PROVIDER); + return StringUtils.equals(url.getProtocol(), CommonConstants.PROVIDER); } @Override diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java index 8672cc0..c0e912c 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java @@ -61,7 +61,7 @@ public class PolarisServiceDiscovery extends AbstractServiceDiscovery { public PolarisServiceDiscovery(ApplicationModel applicationModel, URL url) { super(applicationModel, url); - this.operator = PolarisOperators.loadOrStoreForGovernance(url.getHost(), url.getPort(), url.getParameters()); + this.operator = PolarisOperators.INSTANCE.loadOrStoreForGovernance(url.getHost(), url.getPort(), url.getParameters()); this.consumerAPI = operator.getConsumerAPI(); } diff --git a/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java b/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java index 5ddc384..934288f 100644 --- a/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java +++ b/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java @@ -41,6 +41,7 @@ import org.apache.dubbo.rpc.cluster.router.RouterResult; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.ScopeModelAware; +import org.slf4j.Logger; import java.util.ArrayList; import java.util.HashSet; @@ -48,7 +49,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; public class PolarisRouter extends AbstractRouter implements ScopeModelAware { @@ -67,7 +67,7 @@ public PolarisRouter(URL url) { logger.info(String.format("[POLARIS] init service router, url is %s, parameters are %s", url, url.getParameters())); this.routeRuleHandler = new RuleHandler(); - this.operator = PolarisOperators.getGovernancePolarisOperator(); + this.operator = PolarisOperators.INSTANCE.getGovernancePolarisOperator(); this.parser = QueryParser.load(); } @@ -76,55 +76,40 @@ public RouterResult> route(List> invokers, URL url, In if (CollectionUtils.isEmpty(invokers) || Objects.isNull(operator)) { return new RouterResult<>(invokers); } - List serviceInfos = DubboUtils.analyzeRemoteDubboServiceInfo(invokers.get(0), invocation); + List serviceInfos = DubboUtils.analyzeDubboServiceInfo(applicationModel, url, invocation); for (DubboServiceInfo serviceInfo : serviceInfos) { - RouterResult> result = realRoute(invokers, url, invocation, serviceInfo); - if (!result.getResult().isEmpty()) { - return result; - } + RouterResult> result = realRoute(invokers, url, invocation, serviceInfo); + if (!result.getResult().isEmpty()) { + return result; + } } return new RouterResult<>(invokers); } @SuppressWarnings("unchecked") public RouterResult> realRoute(List> invokers, URL url, Invocation invocation, DubboServiceInfo serviceInfo) { - List dubboInstances = new ArrayList<>(invokers.size()); + List instances = new ArrayList<>(invokers.size()); for (Invoker invoker : invokers) { - dubboInstances.add(new InstanceInvoker<>(invoker, serviceInfo, operator.getPolarisConfig().getNamespace())); - } - // 这里先把熔断的实例过滤掉 - List instances = dubboInstances.stream().filter(operator::checkCircuitBreakerPassing).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(instances)) { - instances = dubboInstances; + instances.add(new InstanceInvoker<>(invoker, null, operator.getPolarisConfig().getNamespace())); } - ServiceRule serviceRule = operator.getServiceRule(serviceInfo.getService(), EventType.ROUTING); Object ruleObject = serviceRule.getRule(); if (Objects.isNull(ruleObject)) { - return new RouterResult<>((List>) ((List) instances)); + return new RouterResult<>(invokers); } Set arguments = new HashSet<>(); RoutingProto.Routing routing = (RoutingProto.Routing) ruleObject; Set routeLabels = routeRuleHandler.getRouteLabels(routing); for (String routeLabel : routeLabels) { - // 接口全路径名称,仅支持 Dubbo 应用级注册场景 if (StringUtils.equals(RouteArgument.LABEL_KEY_PATH, routeLabel)) { - if (StringUtils.isNotBlank(serviceInfo.getDubboInterface())) { - arguments.add(RouteArgument.buildPath(serviceInfo.getDubboInterface())); - } - } - // 设置具体的 Dubbo interface 下的某一个 method 名称 - if (StringUtils.equals(RouteArgument.LABEL_KEY_METHOD, routeLabel)) { - arguments.add(RouteArgument.buildMethod(invocation.getMethodName())); - } - if (routeLabel.startsWith(RouteArgument.LABEL_KEY_HEADER)) { + arguments.add(RouteArgument.buildPath(invocation.getMethodName())); + } else if (routeLabel.startsWith(RouteArgument.LABEL_KEY_HEADER)) { String headerName = routeLabel.substring(RouteArgument.LABEL_KEY_HEADER.length()); String value = RpcContext.getClientAttachment().getAttachment(headerName); if (!StringUtils.isBlank(value)) { arguments.add(RouteArgument.buildHeader(headerName, value)); } - } - if (routeLabel.startsWith(RouteArgument.LABEL_KEY_QUERY)) { + } else if (routeLabel.startsWith(RouteArgument.LABEL_KEY_QUERY)) { String queryName = routeLabel.substring(RouteArgument.LABEL_KEY_QUERY.length()); if (!StringUtils.isBlank(queryName)) { Optional value = parser.parse(queryName, invocation.getArguments()); @@ -142,5 +127,4 @@ public RouterResult> realRoute(List> invokers, URL url public void setApplicationModel(ApplicationModel applicationModel) { this.applicationModel = applicationModel; } - } diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/DubboServiceInfo.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/DubboServiceInfo.java index 063f56a..4e9142f 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/DubboServiceInfo.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/DubboServiceInfo.java @@ -51,8 +51,8 @@ public void setMethodName(String methodName) { this.methodName = methodName; } - public String getDubboInterface() { - if (StringUtils.isNotBlank(interfaceName)) { + public String getRateLimitInterface() { + if (StringUtils.isEmpty(interfaceName)) { return interfaceName; } return methodName; diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisConfig.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisConfig.java index 96d26e4..c8ae554 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisConfig.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisConfig.java @@ -72,11 +72,8 @@ private void initAddress(String host, int port, Map parameters) break; case GOVERNANCE: discoverPort = port; - configPort = Integer.parseInt(parameters.getOrDefault(Consts.CONFIG_PORT, configPort + "")); - break; - case METADATA_REPORT: - discoverPort = port; - configPort = Integer.parseInt(parameters.getOrDefault(Consts.CONFIG_PORT, configPort + "")); + String configPortStr = parameters.getOrDefault(Consts.CONFIG_PORT, configPort + ""); + configPort = Integer.parseInt(configPortStr); break; } discoverAddress = String.format("%s:%d", host, discoverPort); diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java index 09fd599..847182c 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java @@ -113,7 +113,7 @@ public class PolarisOperator { private void init(PolarisOperators.OperatorType operatorType, Map parameters, BootConfigHandler... handlers) { ConfigurationImpl configuration = (ConfigurationImpl) ConfigAPIFactory.defaultConfig(); configuration.setDefault(); - if (null != handlers) { + if (null != handlers && handlers.length > 0) { for (BootConfigHandler bootConfigHandler : handlers) { bootConfigHandler.handle(parameters, configuration); } diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperatorDelegate.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperatorDelegate.java index f4415d8..20ab9ed 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperatorDelegate.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperatorDelegate.java @@ -41,7 +41,7 @@ public PolarisOperator getGovernancePolarisOperator() { if (null != polarisOperator) { return polarisOperator; } - polarisOperator = PolarisOperators.getGovernancePolarisOperator(); + polarisOperator = PolarisOperators.INSTANCE.getGovernancePolarisOperator(); return polarisOperator; } } diff --git a/pom.xml b/pom.xml index 03253fd..4731020 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ - 0.2.0-3.2.7-SNAPSHOT + 0.1.0-3.2.7-SNAPSHOT ${maven.build.timestamp} yyyy-MM-dd HH:mm UTF-8 @@ -51,7 +51,7 @@ 3.0.1 3.0.0-M1 1.2.5 - 1.15.1-SNAPSHOT + 1.15.0-SNAPSHOT 3.2.7 1.7.25 2.8.0 From f0b9cdd7069724ef9859c27b32151aae1933519d Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Thu, 1 Feb 2024 21:12:25 +0800 Subject: [PATCH 03/17] feat:support dubbo press demo --- .../provider/AnnotatedGreetingService.java | 36 +++++++++++++++++++ .../example/provider/api/PressAPI001.java | 27 ++++++++++++++ .../dubbo-press-example/pom.xml | 16 +++++++++ dubbo/dubbo-examples/pom.xml | 2 ++ 4 files changed, 81 insertions(+) create mode 100644 dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/AnnotatedGreetingService.java create mode 100644 dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/api/PressAPI001.java create mode 100644 dubbo/dubbo-examples/dubbo-press-example/pom.xml diff --git a/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/AnnotatedGreetingService.java b/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/AnnotatedGreetingService.java new file mode 100644 index 0000000..286b31d --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/AnnotatedGreetingService.java @@ -0,0 +1,36 @@ +/* + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 com.tencent.polaris.press.example.provider; + +import com.tencent.polaris.dubbo.example.api.GreetingService; +import org.apache.dubbo.config.annotation.DubboService; + +@DubboService(version = "1.0.0") +public class AnnotatedGreetingService implements GreetingService { + + @Override + public String sayHello(String name) { + return "hello, " + name + ", source from " + System.getenv("POD_IP"); + } + + @Override + public String sayHi(String name) { + return "[provider by polaris] hi, " + name + ", source from " + System.getenv("POD_IP"); + } + +} \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/api/PressAPI001.java b/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/api/PressAPI001.java new file mode 100644 index 0000000..1c2e8df --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-press-example/dubbo-press-provider/src/main/java/com/tencent/polaris/press/example/provider/api/PressAPI001.java @@ -0,0 +1,27 @@ +/* + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 com.tencent.polaris.press.example.provider.api; + +public interface PressAPI001 { + + String sayHello(String name); + + String sayHi(String name); + +} diff --git a/dubbo/dubbo-examples/dubbo-press-example/pom.xml b/dubbo/dubbo-examples/dubbo-press-example/pom.xml new file mode 100644 index 0000000..5fe230f --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-press-example/pom.xml @@ -0,0 +1,16 @@ + + + + dubbo-examples + com.tencent.polaris + ${revision} + ../pom.xml + + 4.0.0 + dubbo-press-example + + pom + + \ No newline at end of file diff --git a/dubbo/dubbo-examples/pom.xml b/dubbo/dubbo-examples/pom.xml index 928f1f1..e66684f 100644 --- a/dubbo/dubbo-examples/pom.xml +++ b/dubbo/dubbo-examples/pom.xml @@ -20,6 +20,8 @@ dubbo-api-example dubbo-discovery-example + dubbo-press-example + dubbo-press-example/dubbo-press-provider From 1f2ffea75c0f407e19ebd28302216ebf77538c73 Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Thu, 22 Feb 2024 15:40:15 +0800 Subject: [PATCH 04/17] stash local --- .../dubbo-quick-provider/pom.xml | 7 - .../dubbo-ratelimit-consumer/pom.xml | 21 +++ .../dubbo-ratelimit-provider/pom.xml | 156 ++++++++++++++++++ .../ratelimit/example/provider/Main.java | 4 + .../dubbo-governance-example/pom.xml | 21 +++ dubbo/dubbo-examples/pom.xml | 2 +- .../common/registry/PolarisConfig.java | 7 +- 7 files changed, 208 insertions(+), 10 deletions(-) create mode 100644 dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-consumer/pom.xml create mode 100644 dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/pom.xml create mode 100644 dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/src/main/java/com/tencent/polaris/dubbo/ratelimit/example/provider/Main.java create mode 100644 dubbo/dubbo-examples/dubbo-governance-example/pom.xml diff --git a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml index 8ad3238..4c2ccd5 100644 --- a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml +++ b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml @@ -84,13 +84,6 @@ ${revision} - - - com.tencent.polaris - dubbo-ratelimit-polaris - ${revision} - - org.apache.logging.log4j log4j-slf4j-impl diff --git a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-consumer/pom.xml b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-consumer/pom.xml new file mode 100644 index 0000000..0444ed2 --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-consumer/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + com.tencent.polaris + dubbo-examples + 0.1.0-3.2.7-SNAPSHOT + ../../pom.xml + + + dubbo-ratelimit-consumer + + + 17 + 17 + UTF-8 + + + \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/pom.xml b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/pom.xml new file mode 100644 index 0000000..45fb026 --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/pom.xml @@ -0,0 +1,156 @@ + + + + dubbo-governance-example + com.tencent.polaris + ${revision} + ../pom.xml + + 4.0.0 + + dubbo-ratelimit-provider + + + 1.8 + 1.8 + UTF-8 + + 3.2.6 + 4.3.30.RELEASE + 2.20.0 + 4.13.1 + 3.7.0 + + + + + + org.springframework + spring-framework-bom + ${spring.version} + pom + import + + + + org.apache.dubbo + dubbo-bom + ${dubbo.version} + pom + import + + + + junit + junit + ${junit.version} + + + + + + + org.apache.dubbo + dubbo + ${dubbo.version} + + + + com.tencent.polaris + dubbo-api-example + ${revision} + + + + + com.tencent.polaris + dubbo-registry-polaris + ${revision} + + + + + com.tencent.polaris + dubbo-metadatareport-polaris + ${revision} + + + + + com.tencent.polaris + dubbo-configcenter-polaris + ${revision} + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j2.version} + + + + junit + junit + test + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + + package + + shade + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter + + + META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory + + + META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory + + + META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory + + + META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory + + + META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory + + + com.tencent.polaris.dubbo.ratelimit.example.provider.Main + + + + + + + + + + + + \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/src/main/java/com/tencent/polaris/dubbo/ratelimit/example/provider/Main.java b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/src/main/java/com/tencent/polaris/dubbo/ratelimit/example/provider/Main.java new file mode 100644 index 0000000..abdf240 --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/src/main/java/com/tencent/polaris/dubbo/ratelimit/example/provider/Main.java @@ -0,0 +1,4 @@ +package com.tencent.polaris.dubbo.ratelimit.example.provider; + +public class Main { +} diff --git a/dubbo/dubbo-examples/dubbo-governance-example/pom.xml b/dubbo/dubbo-examples/dubbo-governance-example/pom.xml new file mode 100644 index 0000000..a224c10 --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-governance-example/pom.xml @@ -0,0 +1,21 @@ + + + + dubbo-examples + com.tencent.polaris + ${revision} + ../pom.xml + + 4.0.0 + dubbo-governance-example + + pom + + + dubbo-ratelimit-provider + dubbo-ratelimit-consumer + + + \ No newline at end of file diff --git a/dubbo/dubbo-examples/pom.xml b/dubbo/dubbo-examples/pom.xml index e66684f..311d381 100644 --- a/dubbo/dubbo-examples/pom.xml +++ b/dubbo/dubbo-examples/pom.xml @@ -21,7 +21,7 @@ dubbo-api-example dubbo-discovery-example dubbo-press-example - dubbo-press-example/dubbo-press-provider + dubbo-governance-example diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisConfig.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisConfig.java index c8ae554..96d26e4 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisConfig.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisConfig.java @@ -72,8 +72,11 @@ private void initAddress(String host, int port, Map parameters) break; case GOVERNANCE: discoverPort = port; - String configPortStr = parameters.getOrDefault(Consts.CONFIG_PORT, configPort + ""); - configPort = Integer.parseInt(configPortStr); + configPort = Integer.parseInt(parameters.getOrDefault(Consts.CONFIG_PORT, configPort + "")); + break; + case METADATA_REPORT: + discoverPort = port; + configPort = Integer.parseInt(parameters.getOrDefault(Consts.CONFIG_PORT, configPort + "")); break; } discoverAddress = String.format("%s:%d", host, discoverPort); From 7eb51772844e13da8ef202d3bdfe326af03c5b74 Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Wed, 28 Feb 2024 20:46:43 +0800 Subject: [PATCH 05/17] feat:add dubbo-java 3.x example --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4731020..03253fd 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ - 0.1.0-3.2.7-SNAPSHOT + 0.2.0-3.2.7-SNAPSHOT ${maven.build.timestamp} yyyy-MM-dd HH:mm UTF-8 @@ -51,7 +51,7 @@ 3.0.1 3.0.0-M1 1.2.5 - 1.15.0-SNAPSHOT + 1.15.1-SNAPSHOT 3.2.7 1.7.25 2.8.0 From 1b0c6b7b5326fd3fbc567bbd312e018d90c62f1b Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Wed, 28 Feb 2024 21:18:58 +0800 Subject: [PATCH 06/17] stash code --- .../dubbo/configuration/PolarisDynamicConfiguration.java | 2 +- .../com/tencent/polaris/dubbo/registry/PolarisRegistry.java | 2 +- .../tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java | 2 +- .../java/com/tencent/polaris/dubbo/router/PolarisRouter.java | 2 +- .../polaris/common/registry/PolarisOperatorDelegate.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java b/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java index 4c97b76..8f4eaba 100644 --- a/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java +++ b/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java @@ -55,7 +55,7 @@ public class PolarisDynamicConfiguration implements DynamicConfiguration { private Map> listeners = new ConcurrentHashMap<>(); PolarisDynamicConfiguration(URL url) { - this.operator = PolarisOperators.INSTANCE.loadOrStoreForConfig(url.getHost(), url.getPort(), url.getParameters()); + this.operator = PolarisOperators.loadOrStoreForConfig(url.getHost(), url.getPort(), url.getParameters()); this.polarisConfig = operator.getPolarisConfig(); this.fileQuerier = operator.getConfigFileAPI(); this.filePublisher = operator.getConfigFilePublishAPI(); diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java index d9c8c3d..2dd68a9 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java @@ -65,7 +65,7 @@ public class PolarisRegistry extends FailbackRegistry { public PolarisRegistry(URL url) { super(url); - polarisOperator = PolarisOperators.INSTANCE.loadOrStoreForGovernance(url.getHost(), url.getPort(), url.getParameters()); + polarisOperator = PolarisOperators.loadOrStoreForGovernance(url.getHost(), url.getPort(), url.getParameters()); } @Override diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java index c0e912c..8672cc0 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java @@ -61,7 +61,7 @@ public class PolarisServiceDiscovery extends AbstractServiceDiscovery { public PolarisServiceDiscovery(ApplicationModel applicationModel, URL url) { super(applicationModel, url); - this.operator = PolarisOperators.INSTANCE.loadOrStoreForGovernance(url.getHost(), url.getPort(), url.getParameters()); + this.operator = PolarisOperators.loadOrStoreForGovernance(url.getHost(), url.getPort(), url.getParameters()); this.consumerAPI = operator.getConsumerAPI(); } diff --git a/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java b/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java index 934288f..8bcea10 100644 --- a/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java +++ b/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java @@ -67,7 +67,7 @@ public PolarisRouter(URL url) { logger.info(String.format("[POLARIS] init service router, url is %s, parameters are %s", url, url.getParameters())); this.routeRuleHandler = new RuleHandler(); - this.operator = PolarisOperators.INSTANCE.getGovernancePolarisOperator(); + this.operator = PolarisOperators.getGovernancePolarisOperator(); this.parser = QueryParser.load(); } diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperatorDelegate.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperatorDelegate.java index 20ab9ed..f4415d8 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperatorDelegate.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperatorDelegate.java @@ -41,7 +41,7 @@ public PolarisOperator getGovernancePolarisOperator() { if (null != polarisOperator) { return polarisOperator; } - polarisOperator = PolarisOperators.INSTANCE.getGovernancePolarisOperator(); + polarisOperator = PolarisOperators.getGovernancePolarisOperator(); return polarisOperator; } } From 94d01a5d798cd7b68848acdc3e5d77257a4a377d Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Wed, 28 Feb 2024 21:23:40 +0800 Subject: [PATCH 07/17] feat:add dubbo-java 3.x example --- .../CircuitBreakerCallback.java | 29 +++ .../dubbo/ratelimit/RateLimitFilter.java | 4 +- .../polaris/dubbo/router/PolarisRouter.java | 40 ++- .../dubbox/registry/PolarisRegistry.java | 232 ------------------ dubbox/pom.xml | 34 --- .../common/registry/DubboServiceInfo.java | 4 +- 6 files changed, 61 insertions(+), 282 deletions(-) create mode 100644 dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerCallback.java delete mode 100644 dubbox/dubbox-plugins/dubbox-registry-polaris/src/main/java/com/tencent/polaris/dubbox/registry/PolarisRegistry.java delete mode 100644 dubbox/pom.xml diff --git a/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerCallback.java b/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerCallback.java new file mode 100644 index 0000000..326018a --- /dev/null +++ b/dubbo/dubbo-plugins/dubbo-circuitbreaker-polaris/src/main/java/com/tencent/polaris/dubbo/circuitbreaker/CircuitBreakerCallback.java @@ -0,0 +1,29 @@ +/* + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 com.tencent.polaris.dubbo.circuitbreaker; + +import com.tencent.polaris.circuitbreak.client.exception.CallAbortedException; +import org.apache.dubbo.rpc.Invocation; +import org.apache.dubbo.rpc.Invoker; +import org.apache.dubbo.rpc.Result; + +public interface CircuitBreakerCallback { + + Result onCircuitBreaker(Invoker invoker, Invocation invocation, CallAbortedException exception); + +} diff --git a/dubbo/dubbo-plugins/dubbo-ratelimit-polaris/src/main/java/com/tencent/polaris/dubbo/ratelimit/RateLimitFilter.java b/dubbo/dubbo-plugins/dubbo-ratelimit-polaris/src/main/java/com/tencent/polaris/dubbo/ratelimit/RateLimitFilter.java index 3d54103..9807fab 100644 --- a/dubbo/dubbo-plugins/dubbo-ratelimit-polaris/src/main/java/com/tencent/polaris/dubbo/ratelimit/RateLimitFilter.java +++ b/dubbo/dubbo-plugins/dubbo-ratelimit-polaris/src/main/java/com/tencent/polaris/dubbo/ratelimit/RateLimitFilter.java @@ -80,7 +80,7 @@ public Result invoke(Invoker invoker, Invocation invocation) throws RpcExcept if (null == polarisOperator) { return invoker.invoke(invocation); } - List serviceInfos = DubboUtils.analyzeDubboServiceInfo(applicationModel, invoker, invocation); + List serviceInfos = DubboUtils.analyzeLocalDubboServiceInfo(applicationModel, invoker, invocation); for (DubboServiceInfo serviceInfo : serviceInfos) { checkRateLimit(invoker, invocation, serviceInfo); } @@ -117,7 +117,7 @@ private void checkRateLimit(Invoker invoker, Invocation invocation, DubboServ } QuotaResponse quotaResponse = null; try { - quotaResponse = operator.getQuota(serviceInfo.getService(), serviceInfo.getReportMethodName(), arguments); + quotaResponse = operator.getQuota(serviceInfo.getService(), serviceInfo.getDubboInterface(), arguments); } catch (PolarisException e) { Map externalParam = new HashMap<>(); externalParam.put("serviceInfo", serviceInfo); diff --git a/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java b/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java index 8bcea10..5ddc384 100644 --- a/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java +++ b/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java @@ -41,7 +41,6 @@ import org.apache.dubbo.rpc.cluster.router.RouterResult; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.ScopeModelAware; -import org.slf4j.Logger; import java.util.ArrayList; import java.util.HashSet; @@ -49,6 +48,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; public class PolarisRouter extends AbstractRouter implements ScopeModelAware { @@ -76,40 +76,55 @@ public RouterResult> route(List> invokers, URL url, In if (CollectionUtils.isEmpty(invokers) || Objects.isNull(operator)) { return new RouterResult<>(invokers); } - List serviceInfos = DubboUtils.analyzeDubboServiceInfo(applicationModel, url, invocation); + List serviceInfos = DubboUtils.analyzeRemoteDubboServiceInfo(invokers.get(0), invocation); for (DubboServiceInfo serviceInfo : serviceInfos) { - RouterResult> result = realRoute(invokers, url, invocation, serviceInfo); - if (!result.getResult().isEmpty()) { - return result; - } + RouterResult> result = realRoute(invokers, url, invocation, serviceInfo); + if (!result.getResult().isEmpty()) { + return result; + } } return new RouterResult<>(invokers); } @SuppressWarnings("unchecked") public RouterResult> realRoute(List> invokers, URL url, Invocation invocation, DubboServiceInfo serviceInfo) { - List instances = new ArrayList<>(invokers.size()); + List dubboInstances = new ArrayList<>(invokers.size()); for (Invoker invoker : invokers) { - instances.add(new InstanceInvoker<>(invoker, null, operator.getPolarisConfig().getNamespace())); + dubboInstances.add(new InstanceInvoker<>(invoker, serviceInfo, operator.getPolarisConfig().getNamespace())); + } + // 这里先把熔断的实例过滤掉 + List instances = dubboInstances.stream().filter(operator::checkCircuitBreakerPassing).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(instances)) { + instances = dubboInstances; } + ServiceRule serviceRule = operator.getServiceRule(serviceInfo.getService(), EventType.ROUTING); Object ruleObject = serviceRule.getRule(); if (Objects.isNull(ruleObject)) { - return new RouterResult<>(invokers); + return new RouterResult<>((List>) ((List) instances)); } Set arguments = new HashSet<>(); RoutingProto.Routing routing = (RoutingProto.Routing) ruleObject; Set routeLabels = routeRuleHandler.getRouteLabels(routing); for (String routeLabel : routeLabels) { + // 接口全路径名称,仅支持 Dubbo 应用级注册场景 if (StringUtils.equals(RouteArgument.LABEL_KEY_PATH, routeLabel)) { - arguments.add(RouteArgument.buildPath(invocation.getMethodName())); - } else if (routeLabel.startsWith(RouteArgument.LABEL_KEY_HEADER)) { + if (StringUtils.isNotBlank(serviceInfo.getDubboInterface())) { + arguments.add(RouteArgument.buildPath(serviceInfo.getDubboInterface())); + } + } + // 设置具体的 Dubbo interface 下的某一个 method 名称 + if (StringUtils.equals(RouteArgument.LABEL_KEY_METHOD, routeLabel)) { + arguments.add(RouteArgument.buildMethod(invocation.getMethodName())); + } + if (routeLabel.startsWith(RouteArgument.LABEL_KEY_HEADER)) { String headerName = routeLabel.substring(RouteArgument.LABEL_KEY_HEADER.length()); String value = RpcContext.getClientAttachment().getAttachment(headerName); if (!StringUtils.isBlank(value)) { arguments.add(RouteArgument.buildHeader(headerName, value)); } - } else if (routeLabel.startsWith(RouteArgument.LABEL_KEY_QUERY)) { + } + if (routeLabel.startsWith(RouteArgument.LABEL_KEY_QUERY)) { String queryName = routeLabel.substring(RouteArgument.LABEL_KEY_QUERY.length()); if (!StringUtils.isBlank(queryName)) { Optional value = parser.parse(queryName, invocation.getArguments()); @@ -127,4 +142,5 @@ public RouterResult> realRoute(List> invokers, URL url public void setApplicationModel(ApplicationModel applicationModel) { this.applicationModel = applicationModel; } + } diff --git a/dubbox/dubbox-plugins/dubbox-registry-polaris/src/main/java/com/tencent/polaris/dubbox/registry/PolarisRegistry.java b/dubbox/dubbox-plugins/dubbox-registry-polaris/src/main/java/com/tencent/polaris/dubbox/registry/PolarisRegistry.java deleted file mode 100644 index 5995ce2..0000000 --- a/dubbox/dubbox-plugins/dubbox-registry-polaris/src/main/java/com/tencent/polaris/dubbox/registry/PolarisRegistry.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright 2019 NAVER Corp. - * - * Licensed 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 com.tencent.polaris.dubbox.registry; - -import com.alibaba.dubbo.common.Constants; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.common.extension.ExtensionLoader; -import com.alibaba.dubbo.common.utils.CollectionUtils; -import com.alibaba.dubbo.common.utils.ConcurrentHashSet; -import com.alibaba.dubbo.registry.NotifyListener; -import com.alibaba.dubbo.registry.support.FailbackRegistry; -import com.alibaba.dubbo.rpc.Filter; -import com.alibaba.dubbo.rpc.cluster.RouterFactory; -import com.tencent.polaris.api.exception.PolarisException; -import com.tencent.polaris.api.listener.ServiceListener; -import com.tencent.polaris.api.pojo.Instance; -import com.tencent.polaris.api.pojo.ServiceChangeEvent; -import com.tencent.polaris.api.utils.StringUtils; -import com.tencent.polaris.common.registry.Consts; -import com.tencent.polaris.common.registry.ConvertUtils; -import com.tencent.polaris.common.registry.PolarisOperator; -import com.tencent.polaris.common.registry.PolarisOperators; -import com.tencent.polaris.common.utils.ExtensionConsts; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import static com.alibaba.dubbo.common.Constants.CATEGORY_KEY; -import static com.alibaba.dubbo.common.Constants.DEFAULT_CATEGORY; -import static com.alibaba.dubbo.common.Constants.EMPTY_PROTOCOL; -import static com.alibaba.dubbo.common.Constants.PATH_KEY; - -public class PolarisRegistry extends FailbackRegistry { - - private static final Logger LOGGER = LoggerFactory.getLogger(PolarisRegistry.class); - - private final Set registeredInstances = new ConcurrentHashSet<>(); - - private final AtomicBoolean destroyed = new AtomicBoolean(false); - - private final Map> dubboListeners = new ConcurrentHashMap<>(); - - private final Map serviceListeners = new ConcurrentHashMap<>(); - - private final PolarisOperator polarisOperator; - - public PolarisRegistry(URL url) { - super(url); - polarisOperator = PolarisOperators.INSTANCE.loadOrStore(url.getHost(), url.getPort(), url.getParameters()); - } - - @Override - public void doRegister(URL url) { - if (!shouldRegister(url)) { - return; - } - LOGGER.info("[POLARIS] register service to polaris: {}", url.toString()); - Map metadata = new HashMap<>(url.getParameters()); - metadata.put(PATH_KEY, url.getPath()); - int port = url.getPort(); - if (port > 0) { - int weight = url.getParameter(Constants.WEIGHT_KEY, Constants.DEFAULT_WEIGHT); - String version = url.getParameter(Constants.VERSION_KEY, ""); - polarisOperator.register(url.getServiceInterface(), url.getHost(), port, url.getProtocol(), version, weight, - metadata); - registeredInstances.add(url); - } else { - LOGGER.warn("[POLARIS] skip register url {} for zero port value", url); - } - } - - private boolean shouldRegister(URL url) { - return !StringUtils.equals(url.getProtocol(), Constants.CONSUMER); - } - - @Override - public void doUnregister(URL url) { - if (!shouldRegister(url)) { - return; - } - LOGGER.info("[POLARIS] unregister service from polaris: {}", url.toString()); - int port = url.getPort(); - if (port > 0) { - polarisOperator.deregister(url.getServiceInterface(), url.getHost(), url.getPort()); - registeredInstances.remove(url); - } - } - - @Override - public void destroy() { - if (destroyed.compareAndSet(false, true)) { - super.destroy(); - Collection urls = Collections.unmodifiableCollection(registeredInstances); - for (URL url : urls) { - doUnregister(url); - } - polarisOperator.destroy(); - } - } - - @Override - public void doSubscribe(URL url, NotifyListener listener) { - String service = url.getServiceInterface(); - Instance[] instances = polarisOperator.getAvailableInstances(service, true); - onInstances(url, listener, instances); - LOGGER.info("[POLARIS] submit watch task for service {}", service); - - dubboListeners.computeIfAbsent(url, s -> new ConcurrentHashSet<>()); - dubboListeners.get(url).add(listener); - - serviceListeners.computeIfAbsent(url, dubboUrl -> { - ServiceListener serviceListener = new DubboServiceListener(url, this); - polarisOperator.watchService(service, serviceListener); - return serviceListener; - }); - } - - private void onInstances(URL url, NotifyListener listener, Instance[] instances) { - LOGGER.info("[POLARIS] update instances count: {}, service: {}", null == instances ? 0 : instances.length, - url.getServiceInterface()); - List urls = new ArrayList<>(); - if (null != instances) { - for (Instance instance : instances) { - urls.add(instanceToURL(instance)); - } - } - notify(url, listener, toUrlWithEmpty(url, urls)); - } - - private static URL instanceToURL(Instance instance) { - Map newMetadata = new HashMap<>(instance.getMetadata()); - boolean hasWeight = false; - if (newMetadata.containsKey(Constants.WEIGHT_KEY)) { - String weightStr = newMetadata.get(Constants.WEIGHT_KEY); - try { - int weightValue = Integer.parseInt(weightStr); - if (weightValue == instance.getWeight()) { - hasWeight = true; - } - } catch (Exception ignored) { - } - } - if (!hasWeight) { - newMetadata.put(Constants.WEIGHT_KEY, Integer.toString(instance.getWeight())); - } - newMetadata.put(Consts.INSTANCE_KEY_ID, instance.getId()); - newMetadata.put(Consts.INSTANCE_KEY_HEALTHY, Boolean.toString(instance.isHealthy())); - newMetadata.put(Consts.INSTANCE_KEY_ISOLATED, Boolean.toString(instance.isIsolated())); - newMetadata.put(Consts.INSTANCE_KEY_CIRCUIT_BREAKER, ConvertUtils.circuitBreakersToString(instance)); - return new URL(instance.getProtocol(), - instance.getHost(), - instance.getPort(), - newMetadata.get(PATH_KEY), - newMetadata); - } - - private List toUrlWithEmpty(URL providerUrl, List urls) { - if (CollectionUtils.isEmpty(urls)) { - LOGGER.warn("[POLARIS] received empty url address list, will clear current available addresses"); - URL empty = providerUrl - .setProtocol(EMPTY_PROTOCOL) - .addParameter(CATEGORY_KEY, DEFAULT_CATEGORY); - urls.add(empty); - } - return urls; - } - - @Override - public void doUnsubscribe(URL url, NotifyListener listener) { - LOGGER.info("[polaris] unsubscribe service: {}", url.toString()); - ServiceListener serviceListener = serviceListeners.get(listener); - if (serviceListener != null) { - polarisOperator.unwatchService(url.getServiceInterface(), serviceListener); - } - } - - @Override - public boolean isAvailable() { - return true; - } - - private static class DubboServiceListener implements ServiceListener { - - private final URL url; - - private final String service; - - private final PolarisRegistry registry; - - private DubboServiceListener(URL url, PolarisRegistry registry) { - this.url = url; - this.service = url.getServiceInterface(); - this.registry = registry; - } - - @Override - public void onEvent(ServiceChangeEvent serviceChangeEvent) { - try { - Set listeners = registry.dubboListeners.getOrDefault(url, Collections.emptySet()); - Instance[] curInstances = registry.polarisOperator.getAvailableInstances(service, true); - for (NotifyListener listener : listeners) { - registry.onInstances(url, listener, curInstances); - } - } catch (PolarisException e) { - LOGGER.error("[POLARIS] fail to fetch instances for service {}: {}", service, e.toString()); - } - } - } -} diff --git a/dubbox/pom.xml b/dubbox/pom.xml deleted file mode 100644 index d184e22..0000000 --- a/dubbox/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - dubbo-java-polaris - com.tencent.polaris - ${revision} - ../pom.xml - - 4.0.0 - - dubbox - pom - - - 2.6.9 - - - - dubbox-plugins - dubbox-examples - - - - - - com.alibaba - dubbo - ${alibaba.dubbo.version} - - - - \ No newline at end of file diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/DubboServiceInfo.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/DubboServiceInfo.java index 4e9142f..063f56a 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/DubboServiceInfo.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/DubboServiceInfo.java @@ -51,8 +51,8 @@ public void setMethodName(String methodName) { this.methodName = methodName; } - public String getRateLimitInterface() { - if (StringUtils.isEmpty(interfaceName)) { + public String getDubboInterface() { + if (StringUtils.isNotBlank(interfaceName)) { return interfaceName; } return methodName; From 9af842fff43abc83f59cfed8a6c07468282a27ab Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Wed, 28 Feb 2024 21:31:20 +0800 Subject: [PATCH 08/17] feat:add dubbo-java 3.x example --- .../dubbo-quick-consumer/pom.xml | 18 ++ .../dubbo-quick-provider/pom.xml | 18 ++ .../dubbo-ratelimit-consumer/pom.xml | 21 --- .../dubbo-ratelimit-provider/pom.xml | 156 ------------------ .../ratelimit/example/provider/Main.java | 4 - .../dubbo-governance-example/pom.xml | 4 +- dubbo/dubbo-examples/pom.xml | 1 + 7 files changed, 39 insertions(+), 183 deletions(-) delete mode 100644 dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-consumer/pom.xml delete mode 100644 dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/pom.xml delete mode 100644 dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/src/main/java/com/tencent/polaris/dubbo/ratelimit/example/provider/Main.java diff --git a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/pom.xml b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/pom.xml index fa9d2b0..4daa220 100644 --- a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/pom.xml +++ b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/pom.xml @@ -124,6 +124,24 @@ + + META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter + + + META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory + + + META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory + + + META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory + + + META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory + + + META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory + com.tencent.polaris.dubbo.discovery.example.consumer.Main diff --git a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml index 4c2ccd5..8686bba 100644 --- a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml +++ b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/pom.xml @@ -127,6 +127,24 @@ + + META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter + + + META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory + + + META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory + + + META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory + + + META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory + + + META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory + com.tencent.polaris.dubbo.discovery.example.provider.Main diff --git a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-consumer/pom.xml b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-consumer/pom.xml deleted file mode 100644 index 0444ed2..0000000 --- a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-consumer/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - - com.tencent.polaris - dubbo-examples - 0.1.0-3.2.7-SNAPSHOT - ../../pom.xml - - - dubbo-ratelimit-consumer - - - 17 - 17 - UTF-8 - - - \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/pom.xml b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/pom.xml deleted file mode 100644 index 45fb026..0000000 --- a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/pom.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - dubbo-governance-example - com.tencent.polaris - ${revision} - ../pom.xml - - 4.0.0 - - dubbo-ratelimit-provider - - - 1.8 - 1.8 - UTF-8 - - 3.2.6 - 4.3.30.RELEASE - 2.20.0 - 4.13.1 - 3.7.0 - - - - - - org.springframework - spring-framework-bom - ${spring.version} - pom - import - - - - org.apache.dubbo - dubbo-bom - ${dubbo.version} - pom - import - - - - junit - junit - ${junit.version} - - - - - - - org.apache.dubbo - dubbo - ${dubbo.version} - - - - com.tencent.polaris - dubbo-api-example - ${revision} - - - - - com.tencent.polaris - dubbo-registry-polaris - ${revision} - - - - - com.tencent.polaris - dubbo-metadatareport-polaris - ${revision} - - - - - com.tencent.polaris - dubbo-configcenter-polaris - ${revision} - - - - org.apache.logging.log4j - log4j-slf4j-impl - ${log4j2.version} - - - - junit - junit - test - - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.0.0 - - - package - - shade - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter - - - META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory - - - META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory - - - META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory - - - META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory - - - META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory - - - com.tencent.polaris.dubbo.ratelimit.example.provider.Main - - - - - - - - - - - - \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/src/main/java/com/tencent/polaris/dubbo/ratelimit/example/provider/Main.java b/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/src/main/java/com/tencent/polaris/dubbo/ratelimit/example/provider/Main.java deleted file mode 100644 index abdf240..0000000 --- a/dubbo/dubbo-examples/dubbo-governance-example/dubbo-ratelimit-provider/src/main/java/com/tencent/polaris/dubbo/ratelimit/example/provider/Main.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.tencent.polaris.dubbo.ratelimit.example.provider; - -public class Main { -} diff --git a/dubbo/dubbo-examples/dubbo-governance-example/pom.xml b/dubbo/dubbo-examples/dubbo-governance-example/pom.xml index a224c10..25642ce 100644 --- a/dubbo/dubbo-examples/dubbo-governance-example/pom.xml +++ b/dubbo/dubbo-examples/dubbo-governance-example/pom.xml @@ -14,8 +14,8 @@ pom - dubbo-ratelimit-provider - dubbo-ratelimit-consumer + dubbo-governance-provider + dubbo-governance-consumer \ No newline at end of file diff --git a/dubbo/dubbo-examples/pom.xml b/dubbo/dubbo-examples/pom.xml index 311d381..cfbae10 100644 --- a/dubbo/dubbo-examples/pom.xml +++ b/dubbo/dubbo-examples/pom.xml @@ -22,6 +22,7 @@ dubbo-discovery-example dubbo-press-example dubbo-governance-example + dubbo-router-example From 4302d937573a03c480f204f985df719103953422 Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Wed, 28 Feb 2024 21:35:34 +0800 Subject: [PATCH 09/17] feat:add dubbo-java 3.x example --- .../tencent/polaris/dubbo/discovery/example/consumer/Main.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/Main.java b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/Main.java index 2bd536e..cb54f66 100644 --- a/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/Main.java +++ b/dubbo/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/Main.java @@ -44,7 +44,6 @@ public static void main(String[] args) throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConsumerConfiguration.class); context.start(); GreetingServiceConsumer greetingServiceConsumer = context.getBean(GreetingServiceConsumer.class); - System.out.println("please input name"); HttpServer server = HttpServer.create(new InetSocketAddress(LISTEN_PORT), 0); server.createContext(PATH, new EchoClientHandler(greetingServiceConsumer)); From 5574cf2abe44f6dc5c663ad48cb7d9d29e717572 Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Wed, 28 Feb 2024 21:35:50 +0800 Subject: [PATCH 10/17] feat:add dubbo-java 3.x example --- dubbo/dubbo-examples/dubbo-press-example/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dubbo/dubbo-examples/dubbo-press-example/pom.xml b/dubbo/dubbo-examples/dubbo-press-example/pom.xml index 5fe230f..1f09822 100644 --- a/dubbo/dubbo-examples/dubbo-press-example/pom.xml +++ b/dubbo/dubbo-examples/dubbo-press-example/pom.xml @@ -13,4 +13,8 @@ pom + + dubbo-press-provider + + \ No newline at end of file From a5881526848818e9051e6ad93a6c04519722a868 Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Wed, 28 Feb 2024 21:38:53 +0800 Subject: [PATCH 11/17] feat:add dubbo-java 3.x example --- .../com/tencent/polaris/dubbo/registry/PolarisRegistry.java | 2 +- .../com/tencent/polaris/common/registry/PolarisOperator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java index 2dd68a9..f904341 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java @@ -89,7 +89,7 @@ public void doRegister(URL url) { } private boolean shouldRegister(URL url) { - return StringUtils.equals(url.getProtocol(), CommonConstants.PROVIDER); + return StringUtils.equals(url.getSide(), CommonConstants.PROVIDER); } @Override diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java index 847182c..09fd599 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java @@ -113,7 +113,7 @@ public class PolarisOperator { private void init(PolarisOperators.OperatorType operatorType, Map parameters, BootConfigHandler... handlers) { ConfigurationImpl configuration = (ConfigurationImpl) ConfigAPIFactory.defaultConfig(); configuration.setDefault(); - if (null != handlers && handlers.length > 0) { + if (null != handlers) { for (BootConfigHandler bootConfigHandler : handlers) { bootConfigHandler.handle(parameters, configuration); } From fe4bc41424b9c969176814a65be215f83b0ce05d Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Wed, 28 Feb 2024 22:23:55 +0800 Subject: [PATCH 12/17] feat:add dubbo-java 3.x example --- .../polaris/dubbo/metadata/report/PolarisMetadataReport.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java b/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java index 2bfb611..2c92054 100644 --- a/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java +++ b/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java @@ -78,11 +78,8 @@ public class PolarisMetadataReport extends AbstractMetadataReport { private final ScheduledExecutorService fetchMappingExecutor = Executors.newScheduledThreadPool(4, new NamedThreadFactory("polaris-metadata-report")); - private final String polarisToken; - PolarisMetadataReport(URL url) { super(url); - this.polarisToken = url.getParameter(Consts.KEY_TOKEN); this.operator = PolarisOperators.loadOrStoreForMetaReport(url.getHost(), url.getPort(), url.getParameters()); this.config = operator.getPolarisConfig(); this.providerAPI = operator.getProviderAPI(); @@ -195,7 +192,6 @@ private ReportServiceContractRequest toDescriptor(MetadataIdentifier identifier, private Optional getServiceContract(GetServiceContractRequest req) { req.setNamespace(config.getNamespace()); req.setProtocol(Consts.DUBBO_PROTOCOL); - req.setToken(polarisToken); try { ServiceRuleResponse response = consumerAPI.getServiceContract(req); ServiceRule rule = response.getServiceRule(); @@ -223,7 +219,6 @@ private Optional getServiceContract(GetSer private void reportServiceContract(ReportServiceContractRequest req) { req.setNamespace(config.getNamespace()); req.setProtocol(Consts.DUBBO_PROTOCOL); - req.setToken(polarisToken); try { providerAPI.reportServiceContract(req); } catch (PolarisException e) { From 2911a7f236b232b6ff6d5dac540b397af23eb53c Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Fri, 1 Mar 2024 11:16:47 +0800 Subject: [PATCH 13/17] =?UTF-8?q?feat:=E4=B8=8A=E6=8A=A5=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=A5=91=E7=BA=A6=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E8=AE=BF=E9=97=AEtoken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../polaris/dubbo/metadata/report/PolarisMetadataReport.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java b/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java index 2c92054..2bfb611 100644 --- a/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java +++ b/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java @@ -78,8 +78,11 @@ public class PolarisMetadataReport extends AbstractMetadataReport { private final ScheduledExecutorService fetchMappingExecutor = Executors.newScheduledThreadPool(4, new NamedThreadFactory("polaris-metadata-report")); + private final String polarisToken; + PolarisMetadataReport(URL url) { super(url); + this.polarisToken = url.getParameter(Consts.KEY_TOKEN); this.operator = PolarisOperators.loadOrStoreForMetaReport(url.getHost(), url.getPort(), url.getParameters()); this.config = operator.getPolarisConfig(); this.providerAPI = operator.getProviderAPI(); @@ -192,6 +195,7 @@ private ReportServiceContractRequest toDescriptor(MetadataIdentifier identifier, private Optional getServiceContract(GetServiceContractRequest req) { req.setNamespace(config.getNamespace()); req.setProtocol(Consts.DUBBO_PROTOCOL); + req.setToken(polarisToken); try { ServiceRuleResponse response = consumerAPI.getServiceContract(req); ServiceRule rule = response.getServiceRule(); @@ -219,6 +223,7 @@ private Optional getServiceContract(GetSer private void reportServiceContract(ReportServiceContractRequest req) { req.setNamespace(config.getNamespace()); req.setProtocol(Consts.DUBBO_PROTOCOL); + req.setToken(polarisToken); try { providerAPI.reportServiceContract(req); } catch (PolarisException e) { From 8984d0e52d9d587411e6d1111bb6136d683b09da Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Sun, 3 Mar 2024 22:37:12 +0800 Subject: [PATCH 14/17] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dtoken=E7=9A=84?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE&=E8=B0=83=E6=95=B4metareport=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PolarisDynamicConfiguration.java | 29 +++++++++++-- .../report/PolarisMetadataReport.java | 33 +++++++-------- .../dubbo/registry/PolarisRegistry.java | 2 + .../registry/PolarisServiceDiscovery.java | 18 ++++---- .../polaris/common/context/Context.java | 41 +++++++++++++++++++ .../common/registry/PolarisOperator.java | 27 ++++++++++++ .../tencent/polaris/common/utils/Consts.java | 2 + 7 files changed, 123 insertions(+), 29 deletions(-) create mode 100644 polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/context/Context.java diff --git a/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java b/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java index 8f4eaba..c691fe9 100644 --- a/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java +++ b/dubbo/dubbo-plugins/dubbo-configcenter-polaris/src/main/java/com/tencent/polaris/dubbo/configuration/PolarisDynamicConfiguration.java @@ -73,6 +73,7 @@ public void addListener(String key, String group, ConfigurationListener listener configurationListener.process(dubboEvent); }); }); + logger.info(String.format("add polaris config listener, key=%s, group=%s", key, group)); return new CopyOnWriteArraySet<>(); }); @@ -87,14 +88,34 @@ public void removeListener(String key, String group, ConfigurationListener liste @Override public String getConfig(String key, String group, long timeout) throws IllegalStateException { - ConfigFile configFile = fileQuerier.getConfigFile(polarisConfig.getNamespace(), group, key); - return configFile.getContent(); + try { + ConfigFile configFile = fileQuerier.getConfigFile(polarisConfig.getNamespace(), group, key); + return configFile.getContent(); + } catch (PolarisException e) { + logger.error(formatCode( + e.getCode()), + e.getMessage(), + String.format("key=%s, group=%s", key, group), + "get config from polaris fail", + e); + } + return null; } @Override public Object getInternalProperty(String key) { - ConfigFile configFile = fileQuerier.getConfigFile(polarisConfig.getNamespace(), DEFAULT_GROUP, key); - return configFile.getContent(); + try { + ConfigFile configFile = fileQuerier.getConfigFile(polarisConfig.getNamespace(), DEFAULT_GROUP, key); + return configFile.getContent(); + } catch (PolarisException e) { + logger.error(formatCode( + e.getCode()), + e.getMessage(), + String.format("key=%s, group=%s", key, DEFAULT_GROUP), + "get config from polaris fail", + e); + } + return null; } @Override diff --git a/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java b/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java index 2bfb611..028f2f4 100644 --- a/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java +++ b/dubbo/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java @@ -24,6 +24,7 @@ import com.tencent.polaris.api.pojo.ServiceRule; import com.tencent.polaris.api.rpc.GetServiceContractRequest; import com.tencent.polaris.api.rpc.ServiceRuleResponse; +import com.tencent.polaris.common.context.Context; import com.tencent.polaris.common.registry.PolarisConfig; import com.tencent.polaris.common.registry.PolarisOperator; import com.tencent.polaris.common.registry.PolarisOperators; @@ -78,11 +79,8 @@ public class PolarisMetadataReport extends AbstractMetadataReport { private final ScheduledExecutorService fetchMappingExecutor = Executors.newScheduledThreadPool(4, new NamedThreadFactory("polaris-metadata-report")); - private final String polarisToken; - PolarisMetadataReport(URL url) { super(url); - this.polarisToken = url.getParameter(Consts.KEY_TOKEN); this.operator = PolarisOperators.loadOrStoreForMetaReport(url.getHost(), url.getPort(), url.getParameters()); this.config = operator.getPolarisConfig(); this.providerAPI = operator.getProviderAPI(); @@ -114,7 +112,7 @@ public String getServiceDefinition(MetadataIdentifier metadataIdentifier) { List descriptors = result.get().getInterfacesList(); for (ServiceContractProto.InterfaceDescriptor descriptor : descriptors) { - if (!Objects.equals(descriptor.getId(), metadataIdentifier.getIdentifierKey())) { + if (!Objects.equals(descriptor.getName(), metadataIdentifier.getIdentifierKey())) { continue; } return descriptor.getContent(); @@ -127,15 +125,15 @@ public void publishAppMetadata(SubscriberMetadataIdentifier identifier, Metadata ReportServiceContractRequest request = new ReportServiceContractRequest(); request.setName(formatAppMetaName(identifier)); request.setService(identifier.getApplication()); - request.setRevision(identifier.getRevision()); request.setContent(metadataInfo.getContent()); + // TODO 需要设置 version + request.setVersion(Context.getFromGlobal(Consts.INSTANCE_VERSION, Consts.DEFAULT_VERSION)); List descriptors = new ArrayList<>(metadataInfo.getServices().size()); metadataInfo.getServices().forEach((s, serviceInfo) -> { InterfaceDescriptor descriptor = new InterfaceDescriptor(); - descriptor.setId(s); - descriptor.setPath(serviceInfo.getPath()); + descriptor.setPath(serviceInfo.getName()); descriptor.setMethod(""); - descriptor.setName(serviceInfo.getName()); + descriptor.setName(serviceInfo.getMatchKey()); descriptor.setContent(JsonUtils.toJson(serviceInfo)); descriptors.add(descriptor); }); @@ -149,7 +147,7 @@ public MetadataInfo getAppMetadata(SubscriberMetadataIdentifier identifier, Map< GetServiceContractRequest request = new GetServiceContractRequest(); request.setName(formatAppMetaName(identifier)); request.setService(identifier.getApplication()); - request.setVersion(""); + request.setVersion(Context.getFromGlobal(Consts.INSTANCE_VERSION, Consts.DEFAULT_VERSION)); Optional result = getServiceContract(request); if (!result.isPresent()) { @@ -195,7 +193,6 @@ private ReportServiceContractRequest toDescriptor(MetadataIdentifier identifier, private Optional getServiceContract(GetServiceContractRequest req) { req.setNamespace(config.getNamespace()); req.setProtocol(Consts.DUBBO_PROTOCOL); - req.setToken(polarisToken); try { ServiceRuleResponse response = consumerAPI.getServiceContract(req); ServiceRule rule = response.getServiceRule(); @@ -208,8 +205,8 @@ private Optional getServiceContract(GetSer logger.error( formatCode(e.getCode()), e.getMessage(), - "", - "report service_contract fail" + req.toString(), + "get service_contract fail" ); } return Optional.empty(); @@ -220,12 +217,12 @@ private Optional getServiceContract(GetSer * * @param req {@link ReportServiceContractRequest} */ - private void reportServiceContract(ReportServiceContractRequest req) { + private boolean reportServiceContract(ReportServiceContractRequest req) { req.setNamespace(config.getNamespace()); req.setProtocol(Consts.DUBBO_PROTOCOL); - req.setToken(polarisToken); try { providerAPI.reportServiceContract(req); + return true; } catch (PolarisException e) { logger.error( formatCode(e.getCode()), @@ -233,6 +230,7 @@ private void reportServiceContract(ReportServiceContractRequest req) { "", "report service_contract fail" ); + return false; } } @@ -264,8 +262,7 @@ public boolean registerServiceAppMapping(String serviceKey, String application, descriptors.add(descriptor); request.setInterfaceDescriptors(descriptors); - reportServiceContract(request); - return true; + return reportServiceContract(request); } @Override @@ -426,10 +423,10 @@ private static String formatAppMetaName(SubscriberMetadataIdentifier identifier) private static String formatMetadataIdentifier(MetadataIdentifier identifier) { String tmpl = "dubbo::metadata::"; - if (StringUtils.isNotEmpty(identifier.getVersion())) { + if (StringUtils.isNotBlank(identifier.getVersion())) { tmpl += identifier.getVersion() + "::"; } - if (StringUtils.isNotEmpty(identifier.getGroup())) { + if (StringUtils.isNotBlank(identifier.getGroup())) { tmpl += identifier.getGroup() + "::"; } tmpl += identifier.getSide() + "::"; diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java index f904341..485fb3c 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java @@ -16,6 +16,7 @@ package com.tencent.polaris.dubbo.registry; +import com.tencent.polaris.api.exception.ErrorCode; import com.tencent.polaris.api.exception.PolarisException; import com.tencent.polaris.api.listener.ServiceListener; import com.tencent.polaris.api.pojo.Instance; @@ -85,6 +86,7 @@ public void doRegister(URL url) { registeredInstances.add(url); } else { LOGGER.warn("[POLARIS] skip register url {} for zero port value", url); + throw new PolarisException(ErrorCode.INVALID_REQUEST, "zero port url: " + url); } } diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java index 8672cc0..99e2a7f 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java @@ -24,6 +24,7 @@ import com.tencent.polaris.api.rpc.UnWatchServiceRequest; import com.tencent.polaris.api.rpc.WatchServiceRequest; import com.tencent.polaris.api.utils.StringUtils; +import com.tencent.polaris.common.context.Context; import com.tencent.polaris.common.registry.PolarisOperator; import com.tencent.polaris.common.registry.PolarisOperators; import com.tencent.polaris.common.utils.Consts; @@ -46,12 +47,11 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; import java.util.stream.Collectors; public class PolarisServiceDiscovery extends AbstractServiceDiscovery { - private final PolarisOperator operator; + private final PolarisOperator operator; private final ConsumerAPI consumerAPI; @@ -74,15 +74,17 @@ protected void doRegister(ServiceInstance instance) throws RuntimeException { metadata = new HashMap<>(); } metadata.replaceAll((s, s2) -> StringUtils.defaultString(s2)); + String version = instance.getMetadata(Consts.INSTANCE_VERSION, Consts.DEFAULT_VERSION); + Context.saveToGlobal(Consts.INSTANCE_VERSION, version); operator.register( serviceName, instance.getHost(), instance.getPort(), "dubbo", - instance.getMetadata(Consts.INSTANCE_VERSION, "1.0.0"), + version, Integer.parseInt(instance.getMetadata(Consts.INSTANCE_WEIGHT, "100")), metadata - ); + ); } @Override @@ -127,10 +129,11 @@ public List getInstances(String serviceName) throws NullPointer @Override public void addServiceInstancesChangedListener(ServiceInstancesChangedListener - listener) throws NullPointerException, IllegalArgumentException { + listener) throws NullPointerException, IllegalArgumentException { if (!instanceListeners.add(listener)) { return; } + //TODO 日志 Set services = listener.getServiceNames(); for (String service : services) { serviceListeners.computeIfAbsent(service, name -> new ConcurrentHashSet<>()); @@ -152,10 +155,11 @@ public void addServiceInstancesChangedListener(ServiceInstancesChangedListener @Override public void removeServiceInstancesChangedListener(ServiceInstancesChangedListener - listener) throws IllegalArgumentException { + listener) throws IllegalArgumentException { if (!instanceListeners.remove(listener)) { return; } + //TODO 日志 Set services = listener.getServiceNames(); for (String service : services) { Set listeners = serviceListeners.get(service); @@ -177,7 +181,7 @@ public void removeServiceInstancesChangedListener(ServiceInstancesChangedListene } } - private class InnerServiceListener implements ServiceListener{ + private class InnerServiceListener implements ServiceListener { private final String service; diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/context/Context.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/context/Context.java new file mode 100644 index 0000000..0cffa1e --- /dev/null +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/context/Context.java @@ -0,0 +1,41 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed 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 com.tencent.polaris.common.context; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class Context { + + private static final Map GLOBAL_CONTEXT = new ConcurrentHashMap<>(); + + public static void saveToGlobal(String key, T val) { + GLOBAL_CONTEXT.put(key, val); + } + + public static T getFromGlobal(String key) { + return (T) GLOBAL_CONTEXT.get(key); + } + + public static T getFromGlobal(String key, T def) { + if (!GLOBAL_CONTEXT.containsKey(key)) { + return def; + } + return (T) GLOBAL_CONTEXT.get(key); + } + +} diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java index 09fd599..a23c7df 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/registry/PolarisOperator.java @@ -22,6 +22,7 @@ import com.tencent.polaris.api.listener.ServiceListener; import com.tencent.polaris.api.plugin.circuitbreaker.entity.InstanceResource; import com.tencent.polaris.api.plugin.circuitbreaker.entity.Resource; +import com.tencent.polaris.api.plugin.server.ServerConnector; import com.tencent.polaris.api.pojo.CircuitBreakerStatus; import com.tencent.polaris.api.pojo.DefaultServiceInstances; import com.tencent.polaris.api.pojo.Instance; @@ -45,6 +46,7 @@ import com.tencent.polaris.api.rpc.ServicesResponse; import com.tencent.polaris.api.rpc.UnWatchServiceRequest; import com.tencent.polaris.api.rpc.WatchServiceRequest; +import com.tencent.polaris.api.utils.CollectionUtils; import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.circuitbreak.api.CircuitBreakAPI; import com.tencent.polaris.circuitbreak.api.flow.CircuitBreakerFlow; @@ -61,6 +63,7 @@ import com.tencent.polaris.factory.api.DiscoveryAPIFactory; import com.tencent.polaris.factory.api.RouterAPIFactory; import com.tencent.polaris.factory.config.ConfigurationImpl; +import com.tencent.polaris.factory.config.global.ServerConnectorConfigImpl; import com.tencent.polaris.plugins.stat.prometheus.handler.PrometheusHandlerConfig; import com.tencent.polaris.ratelimit.api.core.LimitAPI; import com.tencent.polaris.ratelimit.api.rpc.Argument; @@ -76,10 +79,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.function.Consumer; public class PolarisOperator { @@ -118,6 +124,7 @@ private void init(PolarisOperators.OperatorType operatorType, Map connectors = configuration.getGlobal().getServerConnectors(); + if (CollectionUtils.isNotEmpty(connectors)) { + connectors.forEach(connectorConfig -> connectorConfig.setToken(polarisConfig.getToken())); + } + + // 设置配置中心 ServerConnector 的配置 + ServerConnectorConfigImpl configConnector = configuration.getConfigFile().getServerConnector(); + if (Objects.nonNull(connector)) { + configConnector.setToken(polarisConfig.getToken()); + } + } + } + public void destroy() { sdkContext.close(); } diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/Consts.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/Consts.java index e839609..7881bf3 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/Consts.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/Consts.java @@ -57,4 +57,6 @@ public interface Consts { String CONFIG_PORT = "config_port"; String DISCOVER_PORT = "discover_port"; + + String DEFAULT_VERSION = "1.0.0"; } From a6fe23b916e870bc30fcb174db036c7af50b07db Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Sun, 3 Mar 2024 23:18:23 +0800 Subject: [PATCH 15/17] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dtoken=E7=9A=84?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE&=E8=B0=83=E6=95=B4metareport=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 03253fd..8408839 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ - 0.2.0-3.2.7-SNAPSHOT + 0.2.0-3.2.7 ${maven.build.timestamp} yyyy-MM-dd HH:mm UTF-8 @@ -51,7 +51,7 @@ 3.0.1 3.0.0-M1 1.2.5 - 1.15.1-SNAPSHOT + 1.15.1 3.2.7 1.7.25 2.8.0 From 509c66eb2bab2d811031af2bc01831e412c8e342 Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Mon, 4 Mar 2024 03:06:02 +0800 Subject: [PATCH 16/17] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E7=BA=A7=E6=B3=A8=E5=86=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dubbo-backend-example/pom.xml | 6 +++++ .../src/main/resources/log4j2.xml | 12 ++++++++++ .../main/resources/spring/dubbo.properties | 7 +++--- .../dubbo-front-example/pom.xml | 2 +- .../router/front/example/MiddleConsumer.java | 4 ++-- .../src/main/resources/log4j2.xml | 12 ++++++++++ .../main/resources/spring/dubbo.properties | 7 +++--- .../dubbo-middle-example/pom.xml | 2 +- .../middle/example/MiddleServiceImpl.java | 4 ++-- .../src/main/resources/log4j2.xml | 12 ++++++++++ .../main/resources/spring/dubbo.properties | 10 ++++---- .../polaris/common/utils/DubboUtils.java | 23 +++++++++++++++---- 12 files changed, 81 insertions(+), 20 deletions(-) create mode 100644 dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/src/main/resources/log4j2.xml create mode 100644 dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/resources/log4j2.xml create mode 100644 dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/resources/log4j2.xml diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/pom.xml b/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/pom.xml index 7cb21f7..0c343f1 100644 --- a/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/pom.xml +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/pom.xml @@ -102,6 +102,12 @@ junit test + + com.tencent.polaris + dubbo-api-example + 0.2.0-3.2.7 + compile + diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/src/main/resources/log4j2.xml b/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/src/main/resources/log4j2.xml new file mode 100644 index 0000000..226bc62 --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/src/main/resources/log4j2.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/src/main/resources/spring/dubbo.properties b/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/src/main/resources/spring/dubbo.properties index ae9ad99..9aad458 100644 --- a/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/src/main/resources/spring/dubbo.properties +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-backend-example/src/main/resources/spring/dubbo.properties @@ -1,8 +1,9 @@ dubbo.application.name=dubbo-router-backend -dubbo.application.register-mode=all +dubbo.application.register-mode=instance +dubbo.application.metadata-type=remote +dubbo.application.qosEnable=false dubbo.registry.address=polaris://${POLARIS_DISCOVERY_ADDR} dubbo.config-center.address=polaris://${CONFIG_CENTER_ADDR} dubbo.metadata-report.address=polaris://${METADATA_REPORT_ADDR} dubbo.protocol.name=dubbo -dubbo.protocol.port=27000 -dubbo.provider.filter=polaris_router \ No newline at end of file +dubbo.protocol.port=${DUBBO_PORT} \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/pom.xml b/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/pom.xml index 78603f1..cc09a2f 100644 --- a/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/pom.xml +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/pom.xml @@ -84,7 +84,7 @@ ${revision} - + com.tencent.polaris dubbo-router-polaris diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/java/com/tencent/polaris/dubbo/router/front/example/MiddleConsumer.java b/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/java/com/tencent/polaris/dubbo/router/front/example/MiddleConsumer.java index 71202da..f5146cb 100644 --- a/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/java/com/tencent/polaris/dubbo/router/front/example/MiddleConsumer.java +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/java/com/tencent/polaris/dubbo/router/front/example/MiddleConsumer.java @@ -29,13 +29,13 @@ public class MiddleConsumer { private MiddleService middleService; public String sayHello(String name) { - RpcContext.getClientAttachment().setAttachment("name", name); + RpcContext.getClientAttachment().setAttachment("user", name); String ret = middleService.sayHello(name); return "[FrontService] sayHello, " + name + " -> " + ret; } public String sayHi(String name) { - RpcContext.getClientAttachment().setAttachment("name", name); + RpcContext.getClientAttachment().setAttachment("user", name); String ret = middleService.sayHello(name); return "[FrontService] sayHi, " + name + " -> " + ret; } diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/resources/log4j2.xml b/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/resources/log4j2.xml new file mode 100644 index 0000000..226bc62 --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/resources/log4j2.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/resources/spring/dubbo.properties b/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/resources/spring/dubbo.properties index 6cc2f85..d18f92d 100644 --- a/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/resources/spring/dubbo.properties +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-front-example/src/main/resources/spring/dubbo.properties @@ -1,8 +1,9 @@ dubbo.application.name=dubbo-router-front -dubbo.application.register-mode=all +dubbo.application.register-mode=instance +dubbo.application.metadata-type=remote +dubbo.application.qosEnable=false dubbo.registry.address=polaris://${POLARIS_DISCOVERY_ADDR} dubbo.config-center.address=polaris://${CONFIG_CENTER_ADDR} dubbo.metadata-report.address=polaris://${METADATA_REPORT_ADDR} dubbo.protocol.name=dubbo -dubbo.protocol.port=25000 -dubbo.provider.filter=polaris_router \ No newline at end of file +dubbo.protocol.port=${DUBBO_PORT} diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/pom.xml b/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/pom.xml index d8af81a..a465235 100644 --- a/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/pom.xml +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/pom.xml @@ -84,7 +84,7 @@ ${revision} - + com.tencent.polaris dubbo-router-polaris diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/java/com/tencent/polaris/dubbo/router/middle/example/MiddleServiceImpl.java b/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/java/com/tencent/polaris/dubbo/router/middle/example/MiddleServiceImpl.java index 94e1999..281474a 100644 --- a/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/java/com/tencent/polaris/dubbo/router/middle/example/MiddleServiceImpl.java +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/java/com/tencent/polaris/dubbo/router/middle/example/MiddleServiceImpl.java @@ -31,14 +31,14 @@ public class MiddleServiceImpl implements MiddleService { @Override public String sayHello(String name) { - RpcContext.getClientAttachment().setAttachment("name", name); + RpcContext.getClientAttachment().setAttachment("user", name); String ret = backendService.sayHello(name); return "[MiddleService-" + System.getenv("ENV") + "] sayHello, " + name + " -> " + ret; } @Override public String sayHi(String name) { - RpcContext.getClientAttachment().setAttachment("name", name); + RpcContext.getClientAttachment().setAttachment("user", name); String ret = backendService.sayHello(name); return "[MiddleService-" + System.getenv("ENV") + "] sayHi, " + name + " -> " + ret; } diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/resources/log4j2.xml b/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/resources/log4j2.xml new file mode 100644 index 0000000..226bc62 --- /dev/null +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/resources/log4j2.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/resources/spring/dubbo.properties b/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/resources/spring/dubbo.properties index 291f756..f0abb28 100644 --- a/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/resources/spring/dubbo.properties +++ b/dubbo/dubbo-examples/dubbo-router-example/dubbo-middle-example/src/main/resources/spring/dubbo.properties @@ -1,8 +1,10 @@ -dubbo.application.name=dubbo-middle-front -dubbo.application.register-mode=all +dubbo.application.name=dubbo-router-middle +dubbo.application.register-mode=instance +dubbo.application.metadata-type=remote +dubbo.application.environment=${ENV} +dubbo.application.qosEnable=false dubbo.registry.address=polaris://${POLARIS_DISCOVERY_ADDR} dubbo.config-center.address=polaris://${CONFIG_CENTER_ADDR} dubbo.metadata-report.address=polaris://${METADATA_REPORT_ADDR} dubbo.protocol.name=dubbo -dubbo.protocol.port=26000 -dubbo.provider.filter=polaris_router \ No newline at end of file +dubbo.protocol.port=${DUBBO_PORT} \ No newline at end of file diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/DubboUtils.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/DubboUtils.java index 2f53638..bcb4397 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/DubboUtils.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/utils/DubboUtils.java @@ -20,15 +20,13 @@ import com.tencent.polaris.common.registry.DubboServiceInfo; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.config.ConfigurationUtils; -import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.constants.RegistryConstants; +import org.apache.dubbo.common.url.component.ServiceConfigURL; import org.apache.dubbo.registry.client.InstanceAddressURL; import org.apache.dubbo.rpc.Constants; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.model.ScopeModel; -import org.apache.dubbo.rpc.protocol.ReferenceCountInvokerWrapper; -import org.apache.dubbo.rpc.protocol.dubbo.DubboInvoker; import java.util.ArrayList; import java.util.Collections; @@ -82,7 +80,7 @@ public static List analyzeRemoteDubboServiceInfo(Invoker serviceInfos = new ArrayList<>(2); URL providerUrl = invoker.getUrl(); - if (providerUrl instanceof InstanceAddressURL) { + if (checkIsApplicationMode(invoker)) { serviceInfos.add(DubboServiceInfo.builder() .service(providerUrl.getRemoteApplication()) .interfaceName(providerUrl.getServiceInterface()) @@ -97,4 +95,21 @@ public static List analyzeRemoteDubboServiceInfo(Invoker boolean checkIsApplicationMode(Invoker invoker) { + URL providerUrl = invoker.getUrl(); + if (providerUrl instanceof InstanceAddressURL) { + return true; + } + if (providerUrl instanceof ServiceConfigURL) { + ServiceConfigURL url = (ServiceConfigURL) providerUrl; + String registerMode = url.getParameter(RegistryConstants.REGISTER_MODE_KEY); + switch (registerMode) { + case RegistryConstants.DEFAULT_REGISTER_MODE_ALL: + case RegistryConstants.DEFAULT_REGISTER_MODE_INSTANCE: + return true; + } + } + return false; + } + } \ No newline at end of file From fdf00ba02ee43c40949b3cadec6d84937b044e2c Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Mon, 4 Mar 2024 03:07:34 +0800 Subject: [PATCH 17/17] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E7=BA=A7=E6=B3=A8=E5=86=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tencent/polaris/dubbo/router/PolarisRouter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java b/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java index 5ddc384..ae9dd43 100644 --- a/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java +++ b/dubbo/dubbo-plugins/dubbo-router-polaris/src/main/java/com/tencent/polaris/dubbo/router/PolarisRouter.java @@ -134,7 +134,7 @@ public RouterResult> realRoute(List> invokers, URL url } logger.debug(String.format("[POLARIS] list service(%s), method(%s), labels(%s), url(%s)", serviceInfo.getService(), invocation.getMethodName(), arguments, url)); - List resultInstances = operator.route(serviceInfo.getService(), invocation.getMethodName(), arguments, instances); + List resultInstances = operator.route(serviceInfo.getService(), serviceInfo.getDubboInterface(), arguments, instances); return new RouterResult<>((List>) ((List) resultInstances)); }