1、dubbo分布式框架的由provider,customer和api接口三部分组成;所以标准的做法是创建三个工程分别对应provider,customer,和api;
Api项目
由于api只是定义一些需要实现的功能,所以这一个项目只需要定义一些接口就行,在例子中,我们定义了一个ExampleService;
public interface ExampleService extends Serializable{
public String SayHi(String name);
}
provider项目的功能是实现Api中所定义的各种接口,在github上teaey大神,开源了springboot框架下的dubbo-starter项目,具体地址:
https://github.com/teaey/spring-boot-starter-dubbo,dubbo-starter中引用的dubbo是2.5.4版本的,所以在使用dubbo-starter项目之前,可能需要先将dubbo项目从github上下载过来然后maven编译下,下载地址如下:
https://github.com/alibaba/dubbo
编译好之后,会得到dubbo-dubbo-2.5.4-SNAPSHOT的一个jar,添加到本地maven仓库中就行,然后在provider项目中引用dubbo-starter,整个pom如下:
4.0.0
com.hp
dubbo-provider
0.0.1-SNAPSHOT
jar
dubbo-provider
dubbodemo
org.springframework.boot
spring-boot-starter-parent
1.3.6.RELEASE
UTF-8
UTF-8
com.hp
dubbo-api
0.0.1-SNAPSHOT
io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0
org.springframework.boot
spring-boot-maven-plugin
1.3.6.RELEASE
然后在application.properties中声明一些配置如下:
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://172.16.1.55:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.phu.DubboService
spring.dubbo.module.default=false
接着开始实现api中所定义的接口:
@Service(version = "1.0.0")
public class ExampleServiceImpl implements ExampleService{
/**
*
*/
private static final long serialVersionUID = -6591900875272367270L;
@Override
public String SayHi(String name) {
// TODO Auto-generated method stub
return "hi,provider:"+name;
}
}
在这里@Service(version="1.0.0")标签的作用声明服务提供者的版本;
customer项目中,是使用provider项目中实现的接口,其pom的引用跟provider是一样的。
使用provider提供的服务时,加入@Reference(version="1.0.0")标签,正如前面Service标签提供的版本号
@Component
public class SayHiService {
@Reference(version="1.0.0")
ExampleService pSayHiService;
public String sayHi(){
return pSayHiService.SayHi("consumer");
}
}
这样就可以引用provider提供的服务了;
PS:因为dubbo项目是注册在zookeeper上的,所以项目启动之前需要先打开zookeeper;