1。为什么要集成Dubbo来实现SOADDubbo不仅是一个高性能的RPC调用框架,更是一个SOA服务治理的解决方案。核心:1.远程通信,像本地调用一样调用远程方法。2.集群容错3.服务自动发现和注册,可以平滑的添加或删除服务提供者。我们经常使用Springboot来暴露HTTP服务,使用JSON方式。但是逐渐量大了,一个SOA治理解决方案。这样就可以将Dubbo服务接口暴露出来,提供给Dubbo消费者进行RPC调用。下面详细讲解一下如何集成Dubbo。2、运行springboot-dubbo-server和springboot-dubbo-client项目运行环境:JDK7或8,Maven3.0+技术栈:SpringBoot1.5+,Dubbo2.5+,ZooKeeper3.3+1。ZooKeeper服务注册表ZooKeeper是一种分布式风格的开源分布式应用程序协调服务。它是一种为分布式应用程序提供一致服务的软件。其功能包括:配置维护、域名服务、分布式同步、群组服务等。从地址http://www.apache.org/dyn/closer.cgi/zookeeper下载ZooKeeper并解压ZooKeepertarzxvfzookeeper-3.4.8.tar.gz.在conf目录下新建一个zoo.cfg,根据该目录下的zoo_sample.cfg进行如下配置。cdzookeeper-3.3.6/confvimzoo.cfgzoo.cfg代码如下(自己指定日志文件目录):tickTime=2000dataDir=/javaee/zookeeper/datadataLogDir=/javaee/zookeeper/logclientPort=2181在bin目录下,启动ZooKeeper:cdzookeeper-3.3.6/bin./zkServer.shstart2。gitclone下载项目springboot-learning-example项目地址见GitHub-https://github.com/JeffLi1993/springboot-learning-example:gitclonegit@github.com:JeffLi1993/springboot-learning-example.git然后Maven编译和安装这个项目:cdspringboot-learning-examplemvncleaninstall3。运行springboot-dubbo-serverDubbo服务提供者项目右键运行springboot-dubbo-server项目ServerApplication应用启动类的main函数。Console中出现如下表示项目启动成功:表示Dubbo服务已经成功启动并注册到ZK(ZooKeeper)中。4、运行springboot-dubbo-clientDubbo服务消费项目,右键运行springboot-dubbo-client项目ClientApplication应用启动类的main函数。控制台中出现以下内容:...2017-03-0116:31:38.473INFO9896---[main]o.s.j.e.a.AnnotationMBeanExporter:RegisteringbeansforJMXexposureonstartup2017-03-0116:31:38.538INFO9896---[Tomcats.b.c.let.t.TomcatEmbeddedontainerport):8081(http)2017-03-0116:31:38.547INFO9896---[main]org.spring.springboot.ClientApplication:StartedClientApplicationin6.055seconds(JVMrunningfor7.026)City{id=1,provinceId=2,cityName='温岭',description='是我的家乡'}最后打印的城市信息是通过dubbo服务接口调用获取的。顺利运行??成功。下面详细解释各个代码和配置。3、springboot-dubbo-server和springboot-dubbo-client项目配置的详细代码在GitHub上,https://github.com/JeffLi1993/springboot-learning-example。一、springboot-dubbo-serverDubbo服务提供者项目详解springboot-dubbo-server项目目录结构├──pom.xml└──src└──main├──java│└──org│└──spring│└──springboot│├──ServerApplication.java│├──domain│└──City.java│└──dubbo│├──CityDubboService.java│└──impl│└──CityDubboServiceImpl.java└──resources└──application.propertiesa.pom.xml配置pom.xml依赖spring-boot-starter-dubbo项目,项目地址为https://github.com/teaey/spring-boot-starter-dubbo。pom.xml配置如下4.0.0springbootspringboot-dubbo-server0.0.1-SNAPSHOTspringboot-dubbo服务端::整合Dubbo/ZooKeeper详解SOA案例org.springframework.bootspring-boot-starter-parent1.5.1.RELEASE1.0.0io.dubbo.springbootspring-boot-starter-dubbo${dubbo-spring-boot}org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestjunitjunit4.12b.application.properties配置##Dubbo服务提供者配置##Dubbo服务提供者配置spring.dubbo.application.name=providerspring.dubbo.registry.address=zookeeper://127.0.0.1:2181spring.dubbo.protocol.name=dubbospring.dubbo.protocol.port=20880spring.dubbo.scan=org.spring.springboot.dubbo这里ZK配置的地址和端口就是上面本机搭建的ZK。如果你有自己的ZK,可以修改如下配置。配置解释如下:spring.dubbo.application.name应用名称spring.dubbo.registry.address注册中心地址spring.dubbo.protocol.name协议名称spring.dubbo.protocol.port协议端口spring.dubbo.scandubbo服务包目录c.CityDubboServiceImpl.java城市业务Dubbo服务层实现层类//注册为Dubbo服务@Service(version="1.0.0")publicclassCityDubboServiceImplimplementsCityDubboService{publicCityfindCityByName(StringcityName){returnnewCity(1L,2L,"温岭","YesMyhometown");}}@Service注解标识为Dubbo服务,版本号由version指定。d.City.java城市实体类实体类需要通过Dubbo服务间的RPC调用实现序列化接口。最好指定serialVersionUID值。2、springboot-dubbo-clientDubbo服务消费项目详解├──pom.xml└──src└──main├──java│└──org│└──spring│└──springboot│├──ClientApplication.java│├──domain││└──City.java│└──dubbo│├──CityDubboConsumerService.java│└──CityDubboService.java└──resources└──application.propertiespom.xml,CityDubboService.java,City.java没有变化。Dubbo消费者通过引入接口实现对Dubbo接口的调用。a.application.properties配置##避免与服务器项目端口冲突server.port=8081##Dubbo服务消费者配置spring.dubbo.application.name=consumerspring.dubbo.registry.address=zookeeper://127.0.0.1:2181spring.dubbo.scan=org.spring.springboot.dubbo因为springboot-dubbo-server项目开始占用8080端口,所以这里设置端口为8081。b.CityDubboConsumerService.java城市Dubbo服务消费者@ComponentpublicclassCityDubboConsumerService{@Reference(version="1.0.0")CityDubboServicecityDubboService;publicvoidprintCity(){StringcityName="温岭";Citycity=cityDubboService.findCityByName(cityName);System.out.println(city.toString());}}@Reference(version="1.0.0")通过该注解订阅接口版本为1.0.0的Dubbo服务。这里将CityDubboConsumerService注入到Spring容器中,更方便的获取bean,进而验证Dubbo调用是否成功。c.ClientApplication.java客户端启动类@SpringBootApplicationpublicclassClientApplication{publicstaticvoidmain(String[]args){//程序启动入口//启动嵌入式Tomcat并初始化Spring环境及其Spring组件ConfigurableApplicationContextrun=SpringApplication.run(ClientApplication.class,args);CityDubboConsumerServicecityService=run.getBean(CityDubboConsumerService.class);cityService.printCity();}}解释一下这个逻辑,就是启动后从Bean容器中获取城市Dubbo服务消费者Bean。然后调用Bean方法验证Dubbo调用是否成功。第四,总结还涉及服务监控和治理。这个和SpringBoot本质上没有关系,这里就不介绍了。感谢Aliteaey提供starter-dubbo项目。【本文为专栏作家“李强强”原创稿件,转载请联系作者获得授权】点此查看该作者更多好文