From cf78c80d38195b05642e14ff927be85544acb131 Mon Sep 17 00:00:00 2001 From: qixiaobo Date: Fri, 26 Jul 2019 15:42:35 +0800 Subject: [PATCH] support dubbo attachments --- .../dubbo/proxy/dao/ServiceDefinition.java | 13 ++++++++++++ .../dubbo/proxy/service/GenericInvoke.java | 21 ++++++++++++------- .../dubbo/proxy/worker/RequestWorker.java | 3 +-- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/apache/dubbo/proxy/dao/ServiceDefinition.java b/src/main/java/org/apache/dubbo/proxy/dao/ServiceDefinition.java index fc1e1bf..bbc7417 100644 --- a/src/main/java/org/apache/dubbo/proxy/dao/ServiceDefinition.java +++ b/src/main/java/org/apache/dubbo/proxy/dao/ServiceDefinition.java @@ -1,6 +1,8 @@ package org.apache.dubbo.proxy.dao; +import java.util.Map; + public class ServiceDefinition { private String application; @@ -8,6 +10,8 @@ public class ServiceDefinition { private String methodName; private Object[] paramValues; private String[] paramTypes; + private Map attachments; + public String getApplication() { return application; @@ -48,4 +52,13 @@ public String[] getParamTypes() { public void setParamTypes(String[] paramTypes) { this.paramTypes = paramTypes; } + + + public Map getAttachments() { + return attachments; + } + + public void setAttachments(Map attachments) { + this.attachments = attachments; + } } diff --git a/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java b/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java index 415fca4..cc572bd 100644 --- a/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java +++ b/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java @@ -1,10 +1,12 @@ package org.apache.dubbo.proxy.service; +import org.apache.dubbo.proxy.dao.ServiceDefinition; import org.apache.dubbo.proxy.utils.ResultCode; import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.ReferenceConfig; import org.apache.dubbo.config.RegistryConfig; import org.apache.dubbo.registry.Registry; +import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.service.GenericService; import org.slf4j.Logger; @@ -36,8 +38,7 @@ public static void init() { private static Logger logger = LoggerFactory.getLogger(GenericInvoke.class); public static Object genericCall(String interfaceName, String group, - String version, String methodName, String[] paramTypes, - Object[] paramObjs) { + String version, ServiceDefinition serviceDefinition) { if (init.compareAndSet(false, true)) { init(); } @@ -46,15 +47,19 @@ public static Object genericCall(String interfaceName, String group, try { GenericService svc = reference.get(); + if (serviceDefinition.getAttachments() != null && !serviceDefinition.getAttachments().isEmpty()) { + RpcContext.getContext().setAttachments(serviceDefinition.getAttachments()); + } logger.info("dubbo generic invoke, service is {}, method is {} , paramTypes is {} , paramObjs is {} , svc" + " is {}.", interfaceName - , methodName,paramTypes,paramObjs,svc); - Object result = svc.$invoke(methodName, paramTypes, paramObjs); + , serviceDefinition.getMethodName(), serviceDefinition.getParamTypes(), serviceDefinition.getParamValues(), svc); + Object result = svc.$invoke(serviceDefinition.getMethodName(), serviceDefinition.getParamTypes(), + serviceDefinition.getParamValues()); return result; } catch (Exception e) { - logger.error("Generic invoke failed",e); + logger.error("Generic invoke failed", e); if (e instanceof RpcException) { - RpcException e1 = (RpcException)e; + RpcException e1 = (RpcException) e; if (e1.isTimeout()) { return ResultCode.TIMEOUT; } @@ -73,7 +78,7 @@ public static Object genericCall(String interfaceName, String group, } private static ReferenceConfig addNewReference(String interfaceName, - String group, String version) { + String group, String version) { ReferenceConfig reference; String cachedKey = interfaceName + group + version; reference = cachedConfig.get(cachedKey); @@ -91,7 +96,7 @@ private static ReferenceConfig addNewReference(String interfaceName, } private static ReferenceConfig initReference(String interfaceName, String group, - String version) { + String version) { ReferenceConfig reference = new ReferenceConfig<>(); reference.setGeneric(true); reference.setApplication(applicationConfig); diff --git a/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java b/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java index 60262a7..00d48d2 100644 --- a/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java +++ b/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java @@ -68,8 +68,7 @@ public void run() { Object result; try { result = GenericInvoke.genericCall(interfaze,group, version, - serviceDefinition.getMethodName(), - serviceDefinition.getParamTypes(), serviceDefinition.getParamValues()); + serviceDefinition); } catch (Exception e) { e.printStackTrace(); result = e;