Dubbo(二):深入理解Dubbo源码之Dubbo的服务发现SPI机制
一、前言 用到微服务就不得不来谈谈服务发现的话题。通俗的来说,就是在提供服务方把服务注册到注册中心,并且告诉服务消费方现在已经存在了这个服务。那么里面的细节到底是怎么通过代码实现的呢,现在我们来看看Dubbo中的SPI机制 二、SPI简介 SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件 ,加载实现类,这样 运行时可以动态的为接口替换实现类 三、Dubbo中的SPI Dubbo与上面的普通的Java方式实现SPI不同,在Dubbo中重新实现了一套功能更强的SPI机制,即通过键值对的方式进行配置及缓存。其中也使用ConcurrentHashMap与synchronize防止并发问题出现。主要逻辑封装在ExtensionLoader中。下面我们看看源码。 四、ExtensionLoader源码解析 由于内部的方法实在太多,我们只挑选与实现SPI的重要逻辑部分拿出来讲解。 1、getExtensionLoader(Class<T> type) 1 public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) { 2 if (type == null ) { 3