1.Provider搭建核心:3件事
1.1 需要告知Provider(服务提供者),Registry(注册中心)(之前已经安装好zookeeper作为注册中心了)在哪里
1.2 告诉Provider使用哪种协议(Dubbo,RMI,Hession)
1.3 Provider告诉Registry,Provider的哪一个服务接口需要发布
2.注意事项
2.1 在使用dubbo的时候,接口和实现类需要分开放到不同的项目
原因:consumer(消费者)需要远程调用接口的时候,需要去依赖接口,如果接口和实现类都在一个项目,那么就直接可以看到实现类了,能看到具体的调用实现就不是RPC调用了
![](https://img.haomeiwen.com/i12093251/93a08ba217433950.png)
创建接口项目,声明服务接口
Provider就是接口项目的实现类项目
Provider就相当于以前单个项目的service的实现类
3.具体步骤
3.1 新建一个Maven项目作为父项目,管理子模块之间的依赖
![](https://img.haomeiwen.com/i12093251/d1ca844805c9303e.png)
![](https://img.haomeiwen.com/i12093251/c54fa21529e59cba.png)
![](https://img.haomeiwen.com/i12093251/1efb007c5f1d1ebe.png)
![](https://img.haomeiwen.com/i12093251/21e2098154d76a2a.png)
![](https://img.haomeiwen.com/i12093251/37e825de9210a115.png)
![](https://img.haomeiwen.com/i12093251/930c86d5de26d736.png)
dubboparent的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sccl</groupId>
<artifactId>dubbo-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>dubbo-service</module>
<module>dubbo-service-impl</module>
</modules>
</project>
3.2 新建一个Maven Project,作为父项目的子模块,里面只有接口(dubbo-service)
3.2.1 为什么这么做?
RPC框架,不希望Consumer知道具体实现.如果实现类和接口在同一个项目中,Consumer依赖这个项目时,就会知道实现类具体实现.
和建立父项目的方式相同,项目建立后,把子模块项目的打包方式改为jar
![](https://img.haomeiwen.com/i12093251/ffc09599097ec1bb.png)
![](https://img.haomeiwen.com/i12093251/8b74c6583904c550.png)
dubbo-service的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dubbo-parent</artifactId>
<groupId>com.sccl</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-service</artifactId>
<packaging>jar</packaging>
</project>
3.3 新建一个Maven Project,作为父项目的子模块,里面写接口的实现类(dubbo-service-impl)
和建立上一个子模块的方式相同,打包方式也改为jar
![](https://img.haomeiwen.com/i12093251/a482cb1b8505992a.png)
![](https://img.haomeiwen.com/i12093251/f818e9a803fc68ed.png)
dubbo-service-impl的pom.xml里面进行配置
1 依赖接口
2 依赖dubbo,去掉老版本spring
3 依赖新版本spring
4 依赖zookeeper客户端工具zkClient
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<!--父工程只相当于是管理依赖的,src包可以删掉-->
<artifactId>dubbo-parent</artifactId>
<groupId>com.sccl</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-service-impl</artifactId>
<packaging>jar</packaging>
<dependencies>
<!--实现类项目依赖接口项目-->
<dependency>
<groupId>com.sccl</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<!--导入dubbo的jar包,dubbo此时依赖的spring版本是2.5.6 SEC03版本的太低了,
需要剔除这个低版本-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<!--剔除2.5.6 SEC03 版本的spring-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--springmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- 访问zookeeper的客户端jar -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
</project>
3.4 在dubbo-service-impl项目中,新建实现类,并实现接口方法.
3.5 新建配置文件dubbo-provider.xml,并配置
3.5.1 <dubbo:application/>
给provider起名,在monitor或管理工具中区别是哪个provider(服务提供者)
3.5.2 <dubbo:registry/>
配置注册中心
1.address
:注册中心的ip和端口
2.protocol
:使用哪种注册中心
3.5.3 <dubbo:protocol/>
配置协议
1.name
:使用什么协议
2.port
:consumer invoke(调用
) provider时的端口号
3.5.4 <dubbo:service/>
注册接口
1.ref
引用接口实现类<bean>
的id
值
dubbo-provider.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-xmlns:全名是xml namespace,也即是为当前的这个xml指定命名空间。
xmlns:xsi:是指当前xml所要遵循的标签规范.
xsi:schemaLocation:指定的命名空间对应的验证文件,用来定义xml schema的地址,
也就是xml书写时需要遵循的语法,用于声明了目标命名空间的模式文档。。两部分组成,
前面部分就是命名空间的名字,后面是xsd(xmlschema)的地址,
也是就表示把定义这个命名空间的schema文件给引用进来,
好让eclipse这类型工具能够解析和验证你的xml文件是否符合语法规范。
等同于。用于声明了目标命名空间的模式文档。
在xsi:schemaLocation后面配置的字符串都是成对的,前面的是命名空间的URI,后面是xsd文件的URI;
小结:给引入的xml文档声明一个命名空间,并指定xml文件遵循的规范,
以及指定xml文件的位置
-->
<!-给当前Provider自定义一个名称-->
<dubbo:application name="dubbo-service"/>
<!-配置注册中心 暴露注册服务地址-->
<dubbo:registry address="192.168.0.106:2181" protocol="zookeeper"/>
<!-provider 使用"dubbo"协议在20880端口暴露服务-->
<dubbo:protocol name="dubbo" port="20880"/>
<!-provider到注册中心注册功能接口-->
<dubbo:service interface="com.sccl.service.DemoService" ref="demoServiceImpl"/>
<bean id="demoServiceImpl" class="com.sccl.service.impl.DemoServiceImpl"/>
</beans>
3.6 启动容器
3.6.1 通过spring方式启动
dubbo-provider.xml位置没有要求
![](https://img.haomeiwen.com/i12093251/5e770539975723fc.png)
//测试服务提供者搭建是否成功
public class Test {
public static void main(String[] args) throws Exception{
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("dubbo-provider.xml");
ac.start();
System.out.println("启动成功");
System.in.read(); //按任意键退出,接收到控制台的输入后就关闭
}
}
3.6.2 使用dubbo提供的方式启动(推荐使用这种方式)
此时要求dubbo-provider.xml必须放入类路径下/META-INF/spring/*.xml
![](https://img.haomeiwen.com/i12093251/bd922a73aadb54f5.png)
// 测试服务提供者搭建是否成功
public class Test {
public static void main(String[] args) throws Exception{
//官方推荐的方式
//强制要求:配置文件必须放在/META-INF/spring/*.xml
Main.main(args);
}
}
启动步骤:先启动注册中心,再启动provider服务
![](https://img.haomeiwen.com/i12093251/36c9167811623035.png)
![](https://img.haomeiwen.com/i12093251/9f19a49d93104459.png)
网友评论