(多图预警)
在学习Dubbo的过程中想搭建个demo来加深理解,但是从网上找了几个教程跟着做后发现很多教程都有些遗漏,要么少点注解要么少些配置的,总是跑不起来,于是自己摸索了半天后搭建起来一个跑的通的demo,并把过程记录下来送给和我一样刚刚接触的小白,以免有些童鞋因为搭不起demo而被折磨的放弃。
项目源码:https://github.com/HiramJoyce/SpringbootDubbo
在教程正式开始之前我希望你已经准备好了如下几个需要的条件:
如果没有zookeeper可以去zookeeper官网按照文档安装一个,过程十分简单,相信你在五分钟之内就能够完成。
项目采用maven多模块架构开发,对于想要学习Springboot多模块开发的童鞋,这个教程也是一份不错的学习教程。
下面开始我们的demo搭建
新建的项目生成了如下pom文件,这个文件不需要手动修改
在父项目中我们不需要编写代码,所以这里可以直接删除掉整个src文件夹
该模块用来统一组织项目中的api,将由后面的provider模块来提供具体的逻辑实现
因为api模块中只需要提供接口所以只需要新建一个普通的maven项目即可,该模块不需要新建为Springboot项目
在api模块中,我们新建包并声明一个接口文件
新建包结构为com.hiram.dubbo.api.service
在刚刚建好的包中新建一个类DemoService
文件中我们生命一个sayHello方法
package com.hiram.dubbo.api.service;
public interface DemoService {
public String sayHello(String name);
}
下面我们新建一个provider模块,在该模块中我们要为刚刚在api模块中声明的service提供具体实现,并通过dubbo的@Service注解将实现的服务发布到dubbo中
provider模块是dubbo中用来提供服务的角色,在此新建一个Springboot项目
新建Springboot项目后,我们需要在provider中增加dubbo的依赖,可以在https://mvnrepository.com/中按照下图的顺序来进行所需依赖的查找
在这里我演示选择的版本是0.2.0,我希望你也能选择这个版本,因为不同的版本之间会有略微的差异
复制好dubbo的依赖后我们粘贴到provider的pom中,同时我们把之前建好的api模块通过依赖方式引入进来
在provider的配置文件中,我们进行一些简单的配置
其中自定义属性demo.service.version是用来规定dubbo服务的版本号,通过发布和使用相同版本号的服务可以减少错误发生的可能,版本的统一管理是开发的规范之一
更多dubbo相关的配置请大家去官网查阅,这里仅进行几项必要的配置
下面我们需要在provider的启动文件中增加一个@EnableDubbo注解以开启Springboot对dubbo的支持
接下来,新建包及实现类来实现api模块中声明的接口方法
在这个实现类中要注意一点,增加的@Service注解是dubbo中的,注解中我们指定了版本号为配置文件中自定义的属性,注意注解不要引用错误
在方法的具体实现中我们简单的返回一个稍加处理后的String
有了服务提供者provider提供服务,我们接下来新建一个服务消费者模块consumer用来消费服务提供者privoder模块提供的服务
同样,我们在consumer的pom中也要引入dubbo和api模块的依赖
在配置文件中我们需要做小小的改动(部分修改和不必要属性的注释),只保留必要的部分即可
同样我们需要在consumer中的启动类前增加@EnableDubbo注解
服务提供者provider对内提供服务,服务消费者consumer消费provider提供的服务,同时consumer对外提供服务,所以我们在consumer中提供controller来增加外部访问的入口
在controller中,我们通过@Reference注解从dubbo引入需要的服务,同样在该注解中指定了服务的版本号为我们在配置文件中自定义的属性,引入了服务后就可以在请求中进行服务的调用了
开发完成后,我们打开zookeeper服务
zookeeper启动完成后我们依次打开dubbo的服务提供者provider和服务消费者consumer,注意这里要先打开服务的提供者,如果消费者启动时引用了dubbo未在zookeeper中注册的服务,会启动失败
继续启动服务消费者consumer
启动过程都成功后就可以在浏览器中查看效果了