dubbo-配置中心

dubbo在2.7版本之前只配备了注册中心,2.7中新增的功能-配置中心和元数据中心,因此dubbo现在拥有三大中心,指的是注册中心、元数据中心和配置中心。

注册中心:分布式环境下提供服务的注册和发现功能,服务治理的关键组件

元数据中心:元数据指的是描述数据的数据。在服务治理中的数据可以理解成provider供者提供的服务、consumer需要消费的服务,而这些服务通常都会有一些描述信息例如接口名、版本号、重试次数、容错机制等等,这些对服务的描述信息就是服务的元数据。

2.7以前,元数据一股脑的丢在注册中心,造成了一系列的问题:

推送量大大->存储数据量大->网络传输量大->延迟

查看更多

dubbo-JDK的SPI原理及源码分析

SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。java语言的特性,一处编译处处运行,很大程度上是因为使用了使用spi机制。

JDK在rt.jar包中定义了很多的接口,这些接口由于各种原因没有给出实现类,

  • 操作系统不同,实现方式不同,例如nio底层的selector实现类,不同os有自己的实现
  • 服务商不同,实现方式不同,例如jdbc,不同的数据库服务商对jdbc都有自己的实现
查看更多

dubbo-基于SPI的自适应扩展机制

复习总结:

1、 自适应扩展机制是为了能够在支持多协议的dubbo框架中根据配置灵活的加载对象,主要使用到了@SPI@Adaptive两个注解

2、@SPI注解在扩展点接口之上,可以指定默认的实现,例如@SPI("dubbo")

3、@Adaptive用于指定扩展点接口的自适应代理类,这个代理类可以是静态的(注解在类上),也可以是代码中生成的(注解在扩展点接口方法上),注意这里代理类的生成是生成一个string类型的code源码,再通过javasisit编译成class。

4、自适应代理类中并没有真的实现接口方法,而是创建出合适的扩展点实现,将调用委托给具体的扩展点实例。

查看更多

dubbo-服务发布和注册过程

1 设计思想

dubbo是基于url驱动的rpc框架

所以在服务启动之后,需要针对指定的协议生成url,若指定了多协议则生成多个url。

生成url并启动本地的服务,我们称为服务发布,随后会将服务url注册到注册中心,这个过程称为服务注册

服务发布注册需要在服务启动过程中进行,启动->发布->注册

那么就需要去设计服务发布注册的时机,dubbo的做法是向springboot注册了一个事件监听器,监听ContextRefreshedEvent事件,当context刷新完成之后,该监听器会执行dubbo服务的发布注册流程。

查看更多

dubbo-基本使用和高级特性

由于dubbo社区较为活跃,版本更新快,在spring-cloud-alibaba之后,spring-boot-dubbo的使用有一些改动,本文代码示例基于dubbo2.7.7版本

1. 基本使用

创建项目结构:api、provider、consumer

1.1 管理项目依赖

api之定义服务提供者消费者之间通信的业务接口,无需添加dubbo相关依赖。

provider

基于springboot构建添加依赖

查看更多

Mybatis-源码分析之sql执行

经过解析阶段,我们获得了一个填充完整的Configuration对象,对象中有一个名为mappedStatementsMap<String, MappedStatement> 用于存放解析好的sql配置,还有一个MapperRegistry记录mapper接口与其代理类工厂的映射关系。

执行一条查询之前,首先要获得执行查询的SqlSession对象,在此之前要拿到工厂类SqlSessionFactory的实例。

1、 获取SqlSession

使用配置对象创建出一个SqlSessionFactory,这里创建的是默认的实现类

1
2
3
4
//SqlSessionFactoryBuilder.class
public SqlSessionFactory build(Configuration config) {
return new DefaultSqlSessionFactory(config);
}

用户代码获取SqlSession

查看更多

Mybatis-源码分析之配置解析

复习总结:

  1. mybatis通过sqlSession调用方法来执行sql查询,sqlSession是由单例对象sqlSessionFactory创建的
  2. 单例对象sqlSessionFactory的创建需要解析全局配置文件,根据配置对象创建出DefaultSqlSessionFactory
  3. 全局配置的解析重点在于mapper的解析,根据mapper配置方式不同分为xml解析和接口解析,每一个解析完成的mapper最终都会调用addMapper方法存储到Configuration.MapperRegistry对象中,该对象维护了每个mapper接口到代理生成对象的映射
  4. mapper中的每一个statement最终都会被解析成一个MappedStatement对象,解析的重点在于SqlSource的创建,动态的、静态的有所区别,最终MappedStatement对象会被添加到Configuration.mappedStatements对象中,这是另一个map,用于维护statementId到MappedStatement对象的映射。
查看更多