无法获取dubbo目标类名问题
在应用端想拦截dubbo client方法的类名,除了实现dubbo 的Filter外,可以使用@Aspect注解和实现MethodInterceptor 接口。但是消费端proxy必须设置jdk,否则获取到的都是“com.alibaba.dubbo.common.bytecode.proxy0”代理类名。
1.使用@Aspect注解核心代码段
Method method = ((MethodSignature) pjp.getSignature()).getMethod();
Class<?> clazz = method.getDeclaringClass();
ManagerMethodInfo info = new ManagerMethodInfo();
info.setClazz(clazz.getName());
info.setMethod(method.getName());
2.实现MethodInterceptor接口核心代码段
Method method = invocation.getMethod();
Class<?> clazz = method.getDeclaringClass();
ManagerMethodInfo info = new ManagerMethodInfo();
info.setClazz(clazz.getName());
info.setMethod(method.getName());
3.dubbo消费端配置方式-xml方式
<dubbo:consumer check="false" proxy="jdk" retries="0" timeout="10000"/>
4.3.dubbo消费端配置方式-spring boot方式
@Configuration
public class DubboProviderConf {
@Resource
private ApplicationConfig applicationConfig;
@Resource
private RegistryConfig registryConfig;
@Bean
public ReferenceBean<VerifyCodeService> verifyCodeService() {
return getRef(VerifyCodeService.class);
}
private <T> ReferenceBean<T> getRef(Class<T> tClass) {
return getRef(tClass, 3000);
}
private <T> ReferenceBean<T> getRef(Class<T> tClass, Integer timeout) {
return getRef(tClass, timeout, 0, true);
}
private <T> ReferenceBean<T> getRefNotCheck(Class<T> tClass, Integer timeout) {
return getRef(tClass, timeout, 0, false);
}
private <T> ReferenceBean<T> getRef(Class<T> tClass, Integer timeout, Integer retry, boolean check) {
ReferenceBean<T> config = new ReferenceBean<T>();
config.setApplication(applicationConfig);
config.setRegistry(registryConfig);
config.setCheck(check);
config.setTimeout(timeout);
config.setRetries(retry);
config.setInterface(tClass);
config.setProxy("jdk");
return config;
}
}