概述:Dubbo是阿里巴巴开源的分布式服务框架。它最大的特点就是层次分明。使用这种方法可以解耦各个层(或尽可能松耦合)。从服务模型来看,Dubbo采用了一种非常简单的模型,要么是提供者提供服务,要么是消费者消费服务,所以基于这一点,可以抽象出服务提供者(Provider)和服务消费者(Consumer)两个角色。下面看一下Dubbo的RPC调用流程,主要涉及4个模块:Registry:服务注册,我们一般使用Zookeeper作为我们的注册中心Provider:服务提供者(生产者),提供具体的服务来实现Consumer:消费者,从中订阅服务theregistryMonitor:监控中心,RPC调用次数和调用时间监控从上图我们可以了解到整个RPC服务调用过程主要是:生产者向服务注册中心发布服务消费者在服务注册中心订阅服务消费者服务注册中心调用注册服务一、项目搭建开发环境主要涉及以下几个方面:Spring-bootJDK8DubboZookeeper项目搭建通过:http://start.spring.io/快速搭建web具体操作参考http://www.cnblogs.com/jaycekon/p/7562688.html由于Dubbo需要使用服务注册中心,所以我们将使用Zookeeper作为服务注册中心在这里。具体安装配置参考http://www.cnblogs.com/jaycekon/p/7562688.html://www.cnblogs.com/jaycekon/p/7553909.html基本环境确定后,目录结构我们的项目结构如下:如上图所示,我们的项目主要分为两个模块,一部分是生产者:spring-boot-dubbo,一部分是:spring-boot-consumer。整个工程结构非常简单,符合Spring-Boot的特点。简单方便。接下来,我们将一步步分析整个项目的结构。2、Productor2.1和Pom.xml工程依赖基础的Spring-Boot。Boot-Web依赖,然后需要引入Dubbo和Zookeeper的额外依赖(详细依赖请参考源码,博文底部会有项目Github地址):io.dubbo.springbootspring-boot-starter-dubbo1.0.0org.apache.zookeeperzookeeper<版本>3.4.6org.slf4jslf4j-log4j12log4jlog4j2.2。配置文件由于我们在底层使用Spring-Boot进行开发,所以要善于利用Spring-Boot给我们带来的优势。所以我们可以直接在Application.properties文件中配置Dubbo服务:##Dubbo服务提供者配置spring.dubbo.application.name=provider--服务名spring.dubbo.registry.address=zookeeper://127.0.0.1:2181--注册中心地址spring.dubbo.protocol.name=dubbo--dubbo协议spring.dubbo.protocol.port=20880spring。dubbo.scan=com.jaycekon.dubbo.service--声明需要暴露的服务接口。如果不使用Spring-Boot自动配置,可以参考配置xml配置:2.3.服务提供服务提供主要包括两部分,一是暴露服务,二是服务实现暴露服务:我们在开发中通常使用的接口,这里我们创建了一个UserService接口,主要包括一个保存用户的方法importcom。jaycekon.dubbo.domain.User;/***CreatedbyJaycekonon2017/9/19.*/publicinterfaceUserService{UsersaveUser(Useruser);}服务实现:服务实现,和我们平时的服务一样,实现接口。比较特别的是,这里需要用到Dubbo的@Service注解。更多springboot实战内容,在Java知音回复“springboot聚合”公众号importcom.alibaba.dubbo.config.annotation.Service;importcom.jaycekon.dubbo.domain.User;importcom.jaycekon.dubbo.service.UserService;/***CreatedbyJaycekonon2017/9/19.*/@ServicepublicclassUserServiceImplimplementsUserService{@OverridepublicUsersaveUser(Useruser){user.setId(1);System.out.println(user.toString());returnuser;}}2.4、总体结构Dubbo服务提供者的整体开发已经完成,非常简单。整体目录结构如下:3.Consumer3.1,pom.xml消费者的相关依赖与生产者的依赖一致。4.0.0com.jaycekonspring-boot-consumer0.0.1-SNAPSHOTjar<名称>spring-boot-consumerDemoprojectforSpringBootorg.springframework.bootspring-boot-starter-parent1.5.7.RELEASEUTF-8UTF-81.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestio.dubbo.springbootspring-boot-starter-dubbo1.0.0org.apache.zookeeperzookeeper3.4.6<排除项><排除项>org.slf4jslf4j-log4j12log4jlog4jorg.springframeworkspringloaded1.2.3.RELEASEorg.projectlomboklombok1.16.18提供plugins>org.springframework.bootspring-boot-maven-plugin3.2、配置文件配置文件与生产者略有不同:##避免与服务器工程端口冲突server.port=8081##Dubbo服务消费者配置spring.dubbo.application.name=consumerspring.dubbo.registry.address=zookeeper://127.0.0.1:2181spring.dubbo.scan=com.jaycekon.dubbo.service基于xml的配置:3.3.服务实现这里如果我们需要在注册服务中调用相关服务,需要实现相关接口importcom.jaycekon.dubbo.domain.User;/***CreatedbyJaycekonon2017/9/19.*/publicinterfaceUserService{UsersaveUser(Useruser);}比如这里我们需要使用生产者中的saveUser(User用户)方法,那么需要创建一个接口,然后在调用的时候使用@Reference注解引用:importcom.alibaba.dubbo.config.annotation.Reference;importcom.jaycekon.dubbo.domain.City;importcom.jaycekon.dubbo.domain.User;importorg.springframework.stereotype.Component;/***CityDubbo服务消费者**CreatedbyJaycekonon20/09/2017.*/@ComponentpublicclassCityDubboConsumerService{@ReferenceCityDubboServicecityDubboService;@ReferenceUserServiceuserService;publicvoidprintCity(){StringcityName="广州";Citycity=cityDubboService.findCityByName(cityName);System.out.println(city.toString());}publicUsersaveUser(){Useruser=newUser();user.setUsername("jaycekon").setPassword("jaycekong824");returnuserService。saveUser(用户);}}3.4。服务调用最后我们需要实现一个RESTful接口供用户调用:importcom.jaycekon.dubbo.service.CityDubboConsumerService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/***创建者Jaycekonon2017/9/19.*/@RestControllerpublicclassUserController{@AutowiredprivateCityDubboConsumerServiceservice;@RequestMapping("/save")publicObjectsaveUser(){returnservice.saveUser();}}3.5。目录结构4.总结这篇博客主要是博主在学习Spring-boot的时候写的。经过一些列的对比,感觉Dubbo和Spring-Cloud还是有差距的。无论是在服务提供还是社区活跃度上,还是Spring-Cloud更强。不过由于公司内部使用的是Dubbo,所以还是需要研究一下。以后会研究Spring-Cloud,分项。GitHub地址https://github.com/jaycekon/SpringBoot