From 10665ecd9b848e42529ad25c31bd5098f5aa4472 Mon Sep 17 00:00:00 2001 From: amyson Date: Fri, 18 Aug 2023 11:11:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?dubbo=E5=90=91polaris=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=97=B6=EF=BC=8C=E8=83=BD=E5=A4=9F=E6=8A=8A?= =?UTF-8?q?{application}=E6=B3=A8=E5=86=8C=E4=B8=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E3=80=81=E6=8A=8A=E6=8E=A5=E5=8F=A3=E6=B3=A8=E5=86=8C=E4=B8=BA?= =?UTF-8?q?{application}=E7=9A=84=E5=88=AB=E7=A7=B0=E3=80=82=20=E9=85=8D?= =?UTF-8?q?=E7=BD=AEpolaris=E6=B3=A8=E5=86=8C=E4=B8=AD=E5=BF=83=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E6=97=B6=EF=BC=8C=E5=8F=AA=E9=9C=80=E6=8F=90=E4=BE=9B?= =?UTF-8?q?token=E5=8F=82=E6=95=B0=E5=B0=B1=E5=8F=AF=E4=BB=A5=E5=90=AF?= =?UTF-8?q?=E7=94=A8=E8=AF=A5=E5=8A=9F=E8=83=BD=EF=BC=9B=E4=B8=8D=E6=8F=90?= =?UTF-8?q?=E4=BE=9Btoken=E5=8F=82=E6=95=B0=EF=BC=8C=E5=AE=8C=E5=85=A8?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=8E=9F=E6=9D=A5=E7=9A=84=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E3=80=82=20=E4=BD=BF=E7=94=A8=E5=88=AB=E7=A7=B0=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=90=8E=E7=BB=AD=E7=9A=84=E7=81=B0=E5=BA=A6=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E7=AD=89=E6=B6=89=E5=8F=8A=E6=A0=87=E7=AD=BE=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E6=93=8D=E4=BD=9C=E5=8F=AA=E9=9C=80=E5=9C=A8?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E4=B8=8B=E7=9A=84=E5=AE=9E=E4=BE=8B=E4=B8=8A?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=B8=80=E6=AC=A1=EF=BC=8C=E4=BE=BF=E4=BA=8E?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dubbo/registry/PolarisRegistry.java | 14 ++++- .../registry/PolarisRegistryFactory.java | 1 + .../RegistryServiceAliasOperator.java | 61 +++++++++++++++++++ .../dubbo/servicealias/ServiceAlias.java | 55 +++++++++++++++++ 4 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/RegistryServiceAliasOperator.java create mode 100644 dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/ServiceAlias.java 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 474cb26..09f541d 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 @@ -40,6 +40,9 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; + +import com.tencent.polaris.dubbo.servicealias.RegistryServiceAliasOperator; +import com.tencent.polaris.dubbo.servicealias.ServiceAlias; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.constants.RegistryConstants; @@ -84,6 +87,8 @@ public PolarisRegistry(URL url, BootConfigHandler... handlers) { hasRouter = routerExtensionLoader.hasExtension(ExtensionConsts.PLUGIN_ROUTER_NAME); ExtensionLoader filterExtensionLoader = ExtensionLoader.getExtensionLoader(Filter.class); hasCircuitBreaker = filterExtensionLoader.hasExtension(ExtensionConsts.PLUGIN_CIRCUITBREAKER_NAME); + + RegistryServiceAliasOperator.setup(url); } private URL buildRouterURL(URL consumerUrl) { @@ -121,8 +126,11 @@ public void doRegister(URL url) { if (port > 0) { int weight = url.getParameter(Constants.WEIGHT_KEY, Constants.DEFAULT_WEIGHT); String version = url.getParameter(CommonConstants.VERSION_KEY, ""); - polarisOperator.register(url.getServiceInterface(), url.getHost(), port, url.getProtocol(), version, weight, - metadata); + polarisOperator.register(RegistryServiceAliasOperator.getService(url), url.getHost(), port, + url.getProtocol(), version, weight, metadata); + if (RegistryServiceAliasOperator.enabled()) { + RegistryServiceAliasOperator.saveServiceAlias(new ServiceAlias(url)); + } registeredInstances.add(url); } else { LOGGER.warn("[POLARIS] skip register url {} for zero port value", url); @@ -141,7 +149,7 @@ public void doUnregister(URL url) { LOGGER.info("[POLARIS] unregister service from polaris: {}", url.toString()); int port = url.getPort(); if (port > 0) { - polarisOperator.deregister(url.getServiceInterface(), url.getHost(), url.getPort()); + polarisOperator.deregister(RegistryServiceAliasOperator.getService(url), url.getHost(), url.getPort()); registeredInstances.remove(url); } } diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistryFactory.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistryFactory.java index 4c6466a..da7c827 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistryFactory.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistryFactory.java @@ -17,6 +17,7 @@ package com.tencent.polaris.dubbo.registry; +import com.tencent.polaris.dubbo.servicealias.RegistryServiceAliasOperator; import org.apache.dubbo.common.URL; import org.apache.dubbo.registry.Registry; import org.apache.dubbo.registry.support.AbstractRegistryFactory; diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/RegistryServiceAliasOperator.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/RegistryServiceAliasOperator.java new file mode 100644 index 0000000..475882a --- /dev/null +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/RegistryServiceAliasOperator.java @@ -0,0 +1,61 @@ +package com.tencent.polaris.dubbo.servicealias; + +import org.apache.dubbo.common.URL; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import shade.polaris.okhttp3.*; + +import java.io.IOException; +import java.net.URLDecoder; +import java.util.concurrent.TimeUnit; + +/** + * @author amyson + */ +public class RegistryServiceAliasOperator { + public static String KEY_Polaris_Rest_Token = "token"; + public static String KEY_Polaris_Rest_Port = "port"; + + private static final Logger LOGGER = LoggerFactory.getLogger(RegistryServiceAliasOperator.class); + static String aliasUrl = null; + static String token = null; + static OkHttpClient httpClient = null; + static MediaType jsonType = MediaType.get("application/json; charset=utf-8"); + + public static void setup(URL registryUrl) { + token = registryUrl.getParameter(KEY_Polaris_Rest_Token); + String port = registryUrl.getParameter(KEY_Polaris_Rest_Port, "8090"); + if (token != null) { + token = URLDecoder.decode(token); + aliasUrl = String.format("http://%s:%s/naming/v1/service/alias", registryUrl.getHost(), port); + httpClient = new OkHttpClient().newBuilder() + .connectTimeout(3, TimeUnit.SECONDS) + .readTimeout(3, TimeUnit.SECONDS) + .writeTimeout(3, TimeUnit.SECONDS).build(); + LOGGER.info("[POLARIS] register dubbo service with alias enabled"); + } + } + + public static boolean enabled() { + return token != null; + } + + public static String getService(URL svrUrl) { + return enabled() ? ServiceAlias.getApplication(svrUrl) : svrUrl.getServiceInterface(); + } + + public static void saveServiceAlias(ServiceAlias alias) { + if (!enabled()) + return; + + RequestBody body = RequestBody.create(alias.toJson(), jsonType); + Request request = new Request.Builder().url(aliasUrl) + .header("X-Polaris-Token", token) + .post(body).build(); + try { + httpClient.newCall(request).execute(); + } catch (IOException ex) { + LOGGER.error("[POLARIS] save dubbo service alias %s error", alias.getAlias(), ex); + } + } +} diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/ServiceAlias.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/ServiceAlias.java new file mode 100644 index 0000000..3b07c21 --- /dev/null +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/ServiceAlias.java @@ -0,0 +1,55 @@ +package com.tencent.polaris.dubbo.servicealias; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; +import org.apache.dubbo.common.URL; + +/** + * @author amyson + */ +public class ServiceAlias { + private String service; + private String namespace; + private String alias; + @JSONField(name = "alias_namespace") + private String aliasNamespace; + + public ServiceAlias(URL url) { + this(url, "default"); + } + + public ServiceAlias(URL url, String namespace) { + this(url, namespace, namespace); + } + + public ServiceAlias(URL url, String namespace, String aliasNamespace) { + this.service = getApplication(url); + this.namespace = namespace; + this.alias = url.getServiceInterface(); + this.aliasNamespace = aliasNamespace; + } + + public static String getApplication(URL url) { + return url.getParameter("application"); + } + + public String toJson() { + return JSON.toJSONString(this); + } + + public String getService() { + return service; + } + + public String getNamespace() { + return namespace; + } + + public String getAlias() { + return alias; + } + + public String getAliasNamespace() { + return aliasNamespace; + } +} From 449c1143a1213826861580df090f5a03afb0c541 Mon Sep 17 00:00:00 2001 From: amyson Date: Fri, 1 Sep 2023 11:25:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1=E3=80=81=E4=B8=B4=E6=97=B6=E8=A7=A3?= =?UTF-8?q?=E5=86=B3RuleHandler=E7=9A=84=E6=8A=9B=E5=87=BANoSuchMethodErro?= =?UTF-8?q?r=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98=202=E3=80=81?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E5=9F=BA=E4=BA=8E=20jdk=20URL=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB=E5=AE=9E=E7=8E=B0=E5=90=91=20Polaris=20?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E5=88=AB=E7=A7=B0=203=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E6=8A=9B=E5=87=BA?= =?UTF-8?q?=20NVP=20=E7=9A=84bug=204=E3=80=81=E5=8D=87=E7=BA=A7=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E7=9A=84=20polaris-all=20=E8=87=B3=201.13.0=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dubbo/registry/PolarisRegistry.java | 2 - .../registry/PolarisRegistryFactory.java | 1 + .../RegistryServiceAliasOperator.java | 67 +++++++++++++------ .../dubbo-router-polaris/pom.xml | 5 ++ .../polaris/dubbo/router/PolarisRouter.java | 2 +- polaris-adapter-dubbo/pom.xml | 7 ++ .../polaris/common/parser/QueryParser.java | 7 +- .../polaris/common/router/RuleHandler.java | 33 ++++++++- pom.xml | 4 +- 9 files changed, 98 insertions(+), 30 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 09f541d..8a7a85e 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 @@ -87,8 +87,6 @@ public PolarisRegistry(URL url, BootConfigHandler... handlers) { hasRouter = routerExtensionLoader.hasExtension(ExtensionConsts.PLUGIN_ROUTER_NAME); ExtensionLoader filterExtensionLoader = ExtensionLoader.getExtensionLoader(Filter.class); hasCircuitBreaker = filterExtensionLoader.hasExtension(ExtensionConsts.PLUGIN_CIRCUITBREAKER_NAME); - - RegistryServiceAliasOperator.setup(url); } private URL buildRouterURL(URL consumerUrl) { diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistryFactory.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistryFactory.java index da7c827..171597e 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistryFactory.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistryFactory.java @@ -26,6 +26,7 @@ public class PolarisRegistryFactory extends AbstractRegistryFactory { @Override protected Registry createRegistry(URL url) { + url = RegistryServiceAliasOperator.setup(url); PolarisRegistry polarisRegistry = new PolarisRegistry(url); return polarisRegistry; } diff --git a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/RegistryServiceAliasOperator.java b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/RegistryServiceAliasOperator.java index 475882a..18d7922 100644 --- a/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/RegistryServiceAliasOperator.java +++ b/dubbo/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/servicealias/RegistryServiceAliasOperator.java @@ -3,9 +3,12 @@ import org.apache.dubbo.common.URL; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import shade.polaris.okhttp3.*; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.URLConnection; import java.net.URLDecoder; import java.util.concurrent.TimeUnit; @@ -19,21 +22,17 @@ public class RegistryServiceAliasOperator { private static final Logger LOGGER = LoggerFactory.getLogger(RegistryServiceAliasOperator.class); static String aliasUrl = null; static String token = null; - static OkHttpClient httpClient = null; - static MediaType jsonType = MediaType.get("application/json; charset=utf-8"); - public static void setup(URL registryUrl) { + public static URL setup(URL registryUrl) { token = registryUrl.getParameter(KEY_Polaris_Rest_Token); + if (token == null) + return registryUrl; + String port = registryUrl.getParameter(KEY_Polaris_Rest_Port, "8090"); - if (token != null) { - token = URLDecoder.decode(token); - aliasUrl = String.format("http://%s:%s/naming/v1/service/alias", registryUrl.getHost(), port); - httpClient = new OkHttpClient().newBuilder() - .connectTimeout(3, TimeUnit.SECONDS) - .readTimeout(3, TimeUnit.SECONDS) - .writeTimeout(3, TimeUnit.SECONDS).build(); - LOGGER.info("[POLARIS] register dubbo service with alias enabled"); - } + token = URLDecoder.decode(token); + aliasUrl = String.format("http://%s:%s/naming/v1/service/alias", registryUrl.getHost(), port); + LOGGER.info("[POLARIS] register dubbo service with alias enabled"); + return registryUrl.removeParameter(KEY_Polaris_Rest_Token); } public static boolean enabled() { @@ -48,14 +47,44 @@ public static void saveServiceAlias(ServiceAlias alias) { if (!enabled()) return; - RequestBody body = RequestBody.create(alias.toJson(), jsonType); - Request request = new Request.Builder().url(aliasUrl) - .header("X-Polaris-Token", token) - .post(body).build(); try { - httpClient.newCall(request).execute(); - } catch (IOException ex) { + post(aliasUrl, token, alias.toJson()); + } catch (Exception ex) { LOGGER.error("[POLARIS] save dubbo service alias %s error", alias.getAlias(), ex); } } + + public static void post(String polarisUrl, String token, String body) throws Exception { + PrintWriter out = null; + BufferedReader in = null; + try { + java.net.URL url = new java.net.URL(polarisUrl); + URLConnection conn = url.openConnection(); + + conn.setRequestProperty("X-Polaris-Token", token); + conn.setConnectTimeout(3 * 1000); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible;)"); + conn.setRequestProperty("Content-Type", "application/json"); // 设置内容类型 + + conn.setDoOutput(true); + conn.setDoInput(true); + + out = new PrintWriter(conn.getOutputStream()); + out.print(body); + out.flush(); + + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); + in.readLine(); + } finally { + if (out != null) + out.close(); + if (in != null) { + try { + in.close(); + } catch (IOException ignore) {} + } + } + } } diff --git a/dubbo/dubbo-plugins/dubbo-router-polaris/pom.xml b/dubbo/dubbo-plugins/dubbo-router-polaris/pom.xml index 8948d1d..36939aa 100644 --- a/dubbo/dubbo-plugins/dubbo-router-polaris/pom.xml +++ b/dubbo/dubbo-plugins/dubbo-router-polaris/pom.xml @@ -13,6 +13,11 @@ dubbo-router-polaris + + com.tencent.polaris + polaris-all + ${polaris.version} + com.tencent.polaris dubbo-registry-polaris 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 882eddd..0c88156 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 @@ -59,7 +59,7 @@ public PolarisRouter(URL url) { url.getParameters()); this.priority = url.getParameter(Constants.PRIORITY_KEY, 0); routeRuleHandler = new RuleHandler(); - polarisOperator = PolarisOperators.INSTANCE.getPolarisOperator(url.getHost(), url.getPort()); + polarisOperator = PolarisOperators.INSTANCE.getFirstPolarisOperator(); //这里url是provider,根据地址信息是获取不到的 parser = QueryParser.load(); } diff --git a/polaris-adapter-dubbo/pom.xml b/polaris-adapter-dubbo/pom.xml index 7a0f9c9..6dadd22 100644 --- a/polaris-adapter-dubbo/pom.xml +++ b/polaris-adapter-dubbo/pom.xml @@ -16,6 +16,13 @@ com.tencent.polaris polaris-all + ${polaris.version} + + + com.google.protobuf + protobuf-java + 3.21.7 + compile org.slf4j diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/parser/QueryParser.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/parser/QueryParser.java index f272101..468e1ff 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/parser/QueryParser.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/parser/QueryParser.java @@ -17,6 +17,7 @@ package com.tencent.polaris.common.parser; +import java.util.Iterator; import java.util.Objects; import java.util.Optional; import java.util.ServiceLoader; @@ -28,13 +29,13 @@ public interface QueryParser { String name(); static QueryParser load() { - ServiceLoader loader = ServiceLoader.load(QueryParser.class); - QueryParser instance = loader.iterator().next(); + Iterator queryParserIter = ServiceLoader.load(QueryParser.class).iterator(); + QueryParser instance = queryParserIter.hasNext() ? queryParserIter.next() : null; if (Objects.nonNull(instance)) { return instance; } String parser = System.getProperty("dubbo.polaris.query_parser"); - if (parser.equals("JsonPath")) { + if ("JsonPath".equals(parser)) { return new JsonPathQueryParser(); } return new JavaObjectQueryParser(); diff --git a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/router/RuleHandler.java b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/router/RuleHandler.java index 7abc2ba..55f6a22 100644 --- a/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/router/RuleHandler.java +++ b/polaris-adapter-dubbo/src/main/java/com/tencent/polaris/common/router/RuleHandler.java @@ -23,7 +23,9 @@ import com.tencent.polaris.specification.api.v1.model.ModelProto; import com.tencent.polaris.specification.api.v1.traffic.manage.RateLimitProto; import com.tencent.polaris.specification.api.v1.traffic.manage.RoutingProto; +import com.google.protobuf.StringValue; +import java.lang.reflect.Method; import java.util.Collection; import java.util.HashSet; import java.util.List; @@ -39,18 +41,43 @@ public class RuleHandler { private final Object lock = new Object(); + + static Method getRevision; + static { + /* 直接调用 getRevision() 方法会抛出异常: + java.lang.NoSuchMethodError: com.tencent.polaris.specification.api.v1.traffic.manage.RoutingProto$Routing.getRevision()Lshade/polaris/com/google/protobuf/StringValue; + 暂时通过反射调用方法. + */ + try { + getRevision = RoutingProto.Routing.class.getMethod("getRevision"); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + public static String getRevision(RoutingProto.Routing routing) { + try { + Object revision = getRevision.invoke(routing); + if (revision instanceof StringValue) + return ((StringValue) revision).getValue(); + return revision.toString(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public Set getRouteLabels(RoutingProto.Routing routing) { - TimedCache> setTimedCache = routeRuleMatchLabels.get(routing.getRevision().getValue()); + String revision = getRevision(routing); + TimedCache> setTimedCache = routeRuleMatchLabels.get(revision); if (null != setTimedCache && !setTimedCache.isExpired()) { return setTimedCache.getValue(); } synchronized (lock) { - setTimedCache = routeRuleMatchLabels.get(routing.getRevision().getValue()); + setTimedCache = routeRuleMatchLabels.get(revision); if (null != setTimedCache && !setTimedCache.isExpired()) { return setTimedCache.getValue(); } TimedCache> timedCache = new TimedCache<>(buildRouteLabels(routing)); - routeRuleMatchLabels.put(routing.getRevision().getValue(), timedCache); + routeRuleMatchLabels.put(revision, timedCache); return timedCache.getValue(); } } diff --git a/pom.xml b/pom.xml index cddf8bb..ec4e479 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ - 0.2.2 + 0.3.0-20230901 ${maven.build.timestamp} yyyy-MM-dd HH:mm UTF-8 @@ -52,7 +52,7 @@ 3.0.1 3.0.0-M1 1.2.5 - 1.12.10 + 1.13.0 1.7.25 2.8.0