一、Dubbo依赖
dubbo依赖引入比较简单,只需要引用一个jar包,相关的子依赖包即可自动导入:
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.x.x</version>
</dependency>
二、Spring Boot整合Dubbo
使用springboot整合Dubbo非常简单,包括以下几点:
- 启动类添加@EnableDubbo注解,即可完成dubbo的启动;
- 配置文件中相关参数配置格式为:dubbo.xxx;如:dubbo.application.name, dubbo.registry.address, dubbo.registry.client等;
- 对于provider,对外提供的服务类添加@Service注解即可;
- 对于consumer,使用@Reference即可注入特定的服务;
三、Spring Boot启动Dubbo过程
要了解Spring Boot如何启动Dubbo,从@EnableDubbo注解开始看起:
@EnableDubboConfig
@DubboComponentScan
public @interface EnableDubbo{
xxx
}
EnableDubbo其实是以下两个注解的组合:
- @EnableDubboConfig
- @DubboComponentScan
这两个注解的作用原理都是基于Spring Boot的@Import注解,详细情况如下:
1、@DubboComponentScan
该注解通过引入DubboComponentScanRegistrar类,将扫描路径添加到bean后处理注册器当中,系统启动时通过该类即可注册相关的Service服务。
2、@EnableDubboConfig
该注解通过引入DubboConfigConfigurationSelector类,可以选择single模式和multiple模式:
DubboConfigConfiguration类的定义如下:
public class DubboConfigConfiguration {
/**
* Single Dubbo {@link AbstractConfig Config} Bean Binding
*/
@EnableDubboConfigBindings({
@EnableDubboConfigBinding(prefix = "dubbo.application", type = ApplicationConfig.class),
@EnableDubboConfigBinding(prefix = "dubbo.module", type = ModuleConfig.class),
@EnableDubboConfigBinding(prefix = "dubbo.registry", type = RegistryConfig.class),
@EnableDubboConfigBinding(prefix = "dubbo.protocol", type = ProtocolConfig.class),
@EnableDubboConfigBinding(prefix = "dubbo.monitor", type = MonitorConfig.class),
@EnableDubboConfigBinding(prefix = "dubbo.provider", type = ProviderConfig.class),
@EnableDubboConfigBinding(prefix = "dubbo.consumer", type = ConsumerConfig.class)
})
static class Single {
}
/**
* Multiple Dubbo {@link AbstractConfig Config} Bean Binding
*/
@EnableDubboConfigBindings({
@EnableDubboConfigBinding(prefix = "dubbo.application", type = ApplicationConfig.class, multiple = true),
@EnableDubboConfigBinding(prefix = "dubbo.module", type = ModuleConfig.class, multiple = true),
@EnableDubboConfigBinding(prefix = "dubbo.registry", type = RegistryConfig.class, multiple = true),
@EnableDubboConfigBinding(prefix = "dubbo.protocol", type = ProtocolConfig.class, multiple = true),
@EnableDubboConfigBinding(prefix = "dubbo.monitor", type = MonitorConfig.class, multiple = true),
@EnableDubboConfigBinding(prefix = "dubbo.provider", type = ProviderConfig.class, multiple = true),
@EnableDubboConfigBinding(prefix = "dubbo.consumer", type = ConsumerConfig.class, multiple = true)
})
static class Multiple {
}
}
该类还是一个组合类,由@EnableDubboConfigBindings注解以及@EnableDubboConfigBinding注解组成;
这两个类协同起来将ApplicationConfig,ModuleConfig,RegistryConfig,ProtocolConfig,MonitorConfig,ProviderConfig,ConsumerConfig注册到注册中心。