1、启动zk
2、启动Provider
Provider在启动的时候会调用SimpleInstantiationStrategy.instantiate(),然后循环遍历所有被@@Bean注释的方法
1、启动Provider的时候,首先调用demoXml.annotationBean()用来获取当前实现接口的类所在的包。
@Bean
public static AnnotationBean annotationBean() {
AnnotationBean annotationBean = new AnnotationBean();
annotationBean.setPackage("impl");
return annotationBean;
}
2、调用demoXml.applicationConfig()获取当前项目名
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("dubbo-provider");
return applicationConfig;
}
3、调用demoXml.registryConfig()获取当前暴露的链接,以及链接名
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
registryConfig.setProtocol("zookeeper");
return registryConfig;
}
4、调用demoXml.protocolConfig()获取当前暴露的端口号
@Bean
public ProtocolConfig protocolConfig() {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(20880);
return protocolConfig;
}
5、调用demoXml.getDemoService()获取实现类的对象
@Bean
public DemoService getDemoService(){
DemoService service = new DemoServiceImpl();
return service;
}
6、调用demoXml.providerConfig()将参数打包返回
@Bean(name="myProvider")
public ProviderConfig providerConfig(ApplicationConfig applicationConfig, RegistryConfig registryConfig, ProtocolConfig protocolConfig) {
ProviderConfig providerConfig = new ProviderConfig();
providerConfig.setApplication(applicationConfig);
providerConfig.setRegistry(registryConfig);
providerConfig.setProtocol(protocolConfig);
return providerConfig;
}
7、调用demoXml.commandLineRunner遍历所有@bean的名称
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
3、启动Consumer
1、启动Consumer的时候,首先调用demoXml.annotationBean()用来获取当前实现接口的类所在的包。
@Bean
public static AnnotationBean annotationBean() {
AnnotationBean annotationBean = new AnnotationBean();
annotationBean.setPackage("test");
return annotationBean;
}
2、consumerConfig()
@Bean
public ConsumerConfig consumerConfig() {
ConsumerConfig consumerConfig = new ConsumerConfig();
consumerConfig.setTimeout(3000);
return consumerConfig;
}
3、applicationConfig()
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("dubbo-consumer");
return applicationConfig;
}
4、registryConfig()
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
registryConfig.setClient("zookeeper");
return registryConfig;
}
5、连接到zk上,获取暴露在上面的值
@Reference(version="1.0.0")
DemoService demoService;
6、commandLineRunner()
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans consumer by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
4、导入dubbo的jar
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.12.RELEASE'
compile group: 'com.alibaba', name: 'dubbo', version: '2.5.9'
compile group: 'com.101tec', name: 'zkclient', version: '0.10'
testCompile group: 'junit', name: 'junit', version: '4.12'
compile project(':library')
}
在compile group: ‘com.alibaba’, name: ‘dubbo’, version: '2.5.9’此行中,导入的jar包版本要低于2.6.1,否则会出现java.lang.NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFactory这个异常