美文网首页
04-Dubbo的Provider搭建

04-Dubbo的Provider搭建

作者: bin_lifecycle | 来源:发表于2019-10-11 07:58 被阅读0次

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调用了


dubbo中接口和实现类分开建立

创建接口项目,声明服务接口
Provider就是接口项目的实现类项目
Provider就相当于以前单个项目的service的实现类

3.具体步骤

3.1 新建一个Maven项目作为父项目,管理子模块之间的依赖
新建项目
不需要选择骨架
填写组织名,项目名
点击finish结束,创建父项目成功
父项目创建成功后,删除src目录,只负责管理依赖
父项目的打包方式设置为pom

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


dubbo-service
更改打包方式为jar

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


dubbo-service-impl
打包方式改为jar

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位置没有要求


此时xml文件放在resource目录下
//测试服务提供者搭建是否成功
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

此时需要把xml文件放到要求的目录下
// 测试服务提供者搭建是否成功
public class Test {
    public static void main(String[] args) throws Exception{
      //官方推荐的方式
      //强制要求:配置文件必须放在/META-INF/spring/*.xml
        Main.main(args);
    }
}

启动步骤:先启动注册中心,再启动provider服务


在linux中启动zookeeper注册中心,此时用的单机模式 启动provider服务

相关文章

网友评论

      本文标题:04-Dubbo的Provider搭建

      本文链接:https://www.haomeiwen.com/subject/aluzpctx.html