动态反射调用dubbo的服务

最近想做个公共的平台,直接转发dubbo服务,为http的json、xml接口服务;

大致思路是,管理后台注册需要转发的服务接口,平台通过注册中心和maven仓库,获取dubbo客户端接口share包,然后通过classloader加载jar包,然后通过ReferenceConfig创建代理里,反射调用;

试了很多版本,发现里面的classloader使用都不一样,最终发现在2.2.X之前(版本偏老,有些特性没有)可以直接调通;

另外只有2.4.10版本简单做个如下扩展,可以调通(具体还有没有其他问题,还要验证下);

调用代码:

 
 URL fileUrl = new URL("file:" + "F:\\a\\vcode-service-share-1.2-20150325.025628-3.jar");  
            ClassLoader classLoader = new URLClassLoader(new URL[]{fileUrl});
            Class clazz = classLoader.loadClass(strIntefaceName);
            
            Thread.currentThread().setContextClassLoader(classLoader);
            
            ApplicationConfig application = new ApplicationConfig();
           // application.setCompiler("jdk");
            application.setName("dubbo_consumer");
            
            
            
            ClassLoaderManager.put(strIntefaceName, classLoader);
            
            ReferenceConfig referenceConfig = new ReferenceConfig();
            referenceConfig.setApplication(application);
            referenceConfig.setTimeout(timeout);
            referenceConfig.setInterface(clazz);
            referenceConfig.setUrl(url);
            referenceConfig.setProxy("frogProxyFactory");//2.4.10扩展指定代理工厂
//            referenceConfig.setVersion(version);
            Object obj = referenceConfig.get();
            
            Method clazzMethod = obj.getClass().getMethod(method, new Class[] {String.class,long.class});
            Object resultObj = clazzMethod.invoke(obj,  new Object[] {"xxxxxxx",100000});


2.4.10扩展

FrogJavassistProxyFactory.java扩展

public class FrogJavassistProxyFactory extends JavassistProxyFactory {
    @SuppressWarnings("unchecked")
    @Override
    public <T> T getProxy(Invoker<T> invoker, Class<?>[] interfaces) {
        return (T) Proxy.getProxy(Thread.currentThread().getContextClassLoader(),interfaces).newInstance(new InvokerInvocationHandler(invoker));
    }

}


META-INF/dubbo/com.alibaba.dubbo.rpc.ProxyFactory文件配置

frogProxyFactory=com.xxxx.frog.biz.manager.rpc.FrogJavassistProxyFactory







转载于:https://my.oschina.net/greki/blog/464198

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值