Open geasscai opened 5 years ago
可以参考我的实现方式: 1:创建resources\META-INF\dubbo\org.apache.dubbo.rpc.ProxyFactory 值为: dubboTagSetterProxy=com.ssit.credit.common.dubbo.DubboTagSetterProxy 2: 中增加 proxy="dubboTagSetterProxy" 3: DubboTagSetterProxy源码如下 `package com.ssit.credit.common.dubbo;
import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.proxy.jdk.JdkProxyFactory;
import java.lang.reflect.Proxy;
/**
@author qiongwei.cai */ public class DubboTagSetterProxy extends JdkProxyFactory {
} MyInvokerInvocationHandler源码如下 package com.ssit.credit.common.dubbo;
MyInvokerInvocationHandler源码如下
import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;
import java.lang.reflect.Method;
public class MyInvokerInvocationHandler extends InvokerInvocationHandler {
public MyInvokerInvocationHandler(Invoker<?> handler) { super(handler); } /** * 在dubbo调用判断route前,设置tag进去 * * @author qiongwei.cai */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { DubboTagUtil.setTag();//在这里实现tag设置 return super.invoke(proxy, method, args); }
} `
你好,麻烦能提供下怎么触发这个问题的代码好吗?我测试下并且找方案修复。
比如new一个线程,在这个线程内调用dubbo service,这时候tag就不存在了. 解决方案的话可以参考下我的做法:覆盖InvokerInvocationHandler,使其在每个dubbo service调用前统一设置一下tag
可以参考我的实现方式: 1:创建resources\META-INF\dubbo\org.apache.dubbo.rpc.ProxyFactory 值为: dubboTagSetterProxy=com.ssit.credit.common.dubbo.DubboTagSetterProxy 2: 中增加 proxy="dubboTagSetterProxy"
3: DubboTagSetterProxy源码如下
`package com.ssit.credit.common.dubbo;
import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.proxy.jdk.JdkProxyFactory;
import java.lang.reflect.Proxy;
/**
@author qiongwei.cai */ public class DubboTagSetterProxy extends JdkProxyFactory {
/**
}
MyInvokerInvocationHandler源码如下
package com.ssit.credit.common.dubbo;import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;
import java.lang.reflect.Method;
public class MyInvokerInvocationHandler extends InvokerInvocationHandler {
} `