Dubbo 学习记录

原创 2016年08月18日 15:49:31


1    ExtensionLoader对于每个扩展点都是唯一的,也就是每个扩展点一个ExtensionLoader对象,里面有各种缓存对象,用于缓存配置文件中定义的配置。包括

    private final ConcurrentMap<Class<?>, String> cachedNames = new ConcurrentHashMap<Class<?>, String>();
    
    private final Holder<Map<String, Class<?>>> cachedClasses = new Holder<Map<String,Class<?>>>();

    private final Map<String, Activate> cachedActivates = new ConcurrentHashMap<String, Activate>();

    private volatile Class<?> cachedAdaptiveClass = null;

    private final ConcurrentMap<String, Holder<Object>> cachedInstances = new ConcurrentHashMap<String, Holder<Object>>();

    private String cachedDefaultName;

    private final Holder<Object> cachedAdaptiveInstance = new Holder<Object>();
    private volatile Throwable createAdaptiveInstanceError;

    private Set<Class<?>> cachedWrapperClasses;
    
    private Map<String, IllegalStateException> exceptions = new ConcurrentHashMap<String, IllegalStateException>();

2    Dubbo的Wrapper机制

        在加载SPI方式的FILE后,去加载一个扩展点的时候,获取对应文件,以Protocol为例

registry=com.alibaba.dubbo.registry.integration.RegistryProtocol
filter=com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper
listener=com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper
mock=com.alibaba.dubbo.rpc.support.MockProtocol
injvm=com.alibaba.dubbo.rpc.protocol.injvm.InjvmProtocol
dubbo=com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol
rmi=com.alibaba.dubbo.rpc.protocol.rmi.RmiProtocol
hessian=com.alibaba.dubbo.rpc.protocol.hessian.HessianProtocol
com.alibaba.dubbo.rpc.protocol.http.HttpProtocol
com.alibaba.dubbo.rpc.protocol.webservice.WebServiceProtocol
thrift=com.alibaba.dubbo.rpc.protocol.thrift.ThriftProtocol
memcached=memcom.alibaba.dubbo.rpc.protocol.memcached.MemcachedProtocol
redis=com.alibaba.dubbo.rpc.protocol.redis.RedisProtocol


在加载上面的类时,会处理以下几种情况

1  如果扩展点实现类包括了Adaptive的注解,则设置为该扩展点的适配实现,对应设置为cachedAdaptiveClass

2  如果不符合1,则扩展点实现类是否能执行clazz.getConstructor(type);如果可以,则说明此实现类是包装类,则放入cachedWrapperClasses

3  如果执行clazz.getConstructor(type)报错则看是否在文件中配置了key,例如上述中的com.alibaba.dubbo.rpc.protocol.http.HttpProtocol就没有对应的key,如果有key,则看扩展点实现类是否包括Activate的注解,如果有则放入对应的缓存变量cachedActivates,如果没有注解,则记录对应的cachedNames和extensionClasses








dubbo 2.4.11源代码 - 扩展加载器

dubbo 2.4.11源代码 - 扩展加载器

dubbo+spring_maven 遇到的问题 dubbojar包版本和jdk问题

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating b...

dubbo启动报java.lang.ClassNotFoundException: javassist.ClassPath

在dubbo启动的过程中报错误:java.lang.ClassNotFoundException: javassist.ClassPath,调试发现代码:Class clazz = Class.for...

基于dubbo框架下的RPC通讯协议性能测试

一、前言 Dubbo RPC服务框架支持丰富的传输协议、序列化方式等通讯相关的配置和扩展。dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RP...

Java单元测试问题

出现:The method assertEquals(String, Object, Object) is ambiguous for the type   Assert 导致的代码如下...

common-logging+log4j实现机制

引子:     用到log4j的东西,我想这样优秀的一个日志工具大家都比我熟悉,想必都已经领略了它的强大。大家也知道log4j都是和common-logging一起运用的。今天我自己把log4j的东...

dubbo官网学习资料

  • 2017年11月28日 18:11
  • 19.87MB
  • 下载

dubbo学习静态网页

  • 2017年06月02日 17:56
  • 40.45MB
  • 下载

dubbo框架远程调用bug记录

dubbo框架序列化方式bug。

dubbo学习的项目

  • 2017年03月23日 21:33
  • 42.43MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Dubbo 学习记录
举报原因:
原因补充:

(最多只允许输入30个字)