TTTTTAAAAAKKKKEEEENNNN / FATTest-modularization

FAT test Module
4 stars 2 forks source link

消费者不应使用webFilter,否则在多线程/JSP内的java代码无法设置tag #1

Open geasscai opened 5 years ago

geasscai commented 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;

/**

} 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 {

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);
}

} `

TTTTTAAAAAKKKKEEEENNNN commented 5 years ago

你好,麻烦能提供下怎么触发这个问题的代码好吗?我测试下并且找方案修复。

geasscai commented 5 years ago

比如new一个线程,在这个线程内调用dubbo service,这时候tag就不存在了. 解决方案的话可以参考下我的做法:覆盖InvokerInvocationHandler,使其在每个dubbo service调用前统一设置一下tag