美文网首页
06-Consumer搭建

06-Consumer搭建

作者: bin_lifecycle | 来源:发表于2019-10-23 01:21 被阅读0次

    Consumer的搭建过程

    1.创建Consumer消费者,普通java项目
    新建dubbo-consumer模块
    dubbo-consumer

      1.1 第一次新建我们使用普通jar类型的java项目来测试,等会儿再建成war项目,在pom.xml中引入依赖,主要还是引入dubbo相关3个依赖(接口,dubbo.jar,zkClient)
    dubbo-consumer的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-consumer</artifactId>
        <packaging>jar</packaging>
        <dependencies>
            <!--消费者项目也需要依赖接口项目,才能创建代理,调用功能-->
            <dependency>
                <groupId>com.sccl</groupId>
                <artifactId>dubbo-service</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!--消费者项目也需要依赖dubbo-->
            <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>
    

      1.2 将dubbo-service-impl项目中的dubbo-provider.xml文件copy一份粘贴到dubbo-consumer项目的resource目录,并将文件名重命名为dubbo-consumer.xml,然后修改xml里面的内容

    复制dubbo-provider.xml并重命名为dubbo-consumer.xml

    dubbo-consumer.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文件的位置
        -->
    
        <!--给当前consumer自定义一个名称-->
        <dubbo:application name="dubbo-consumer"/>
        <!--consumer需要订阅服务,所以需要配置注册中心-->
        <!--配置注册中心 暴露注册服务地址-->
        <dubbo:registry address="192.168.0.106:2181" protocol="zookeeper"/>
        <!--consumer可以通过注册中心获取到的服务列表,知道服务方的地址,所以
        不用配置服务方的暴露服务的端口信息了-->
    
        <!--服务消费者方配置dubbo的注解驱动,服务提供者使用dubbo的注解会与Spring
        的注解有冲突所以不能用,但是消费者方没有冲突,所以能用-->
        <!--配置注解扫描,扫描消费者方包下接口的实现类-->
        <dubbo:annotation package="com.sccl.consumer.service.impl"/>
        <!--配置consumer方的实现类,交给Spring容器管理-->
        <bean id="testServiceImpl" class="com.sccl.consumer.service.impl.TestServiceImpl"/>
    </beans>
    

      1.3 在dubbo-consumer项目中新建service接口和impl,以及测试类

    接口,实现类,测试类

    TestService:接口

    package com.sccl.consumer.service;
    
    /**
     * Create by wangbin
     * 2019-10-23-0:31
     */
    public interface TestService {
        void test();
    }
    

    TestServiceImpl:实现类

    package com.sccl.consumer.service.impl;
    
    import com.alibaba.dubbo.config.annotation.Reference;
    import com.sccl.consumer.service.TestService;
    import com.sccl.service.DemoService;
    
    /**
     * Create by wangbin
     * 2019-10-23-0:32
     */
    public class TestServiceImpl implements TestService {
        @Reference //dubbo的注解,表示从注册中心获取该接口的代理对象,通过代理对象调用方法
        private DemoService demoService;//声明Provider方的接口
        @Override
        public void test() {
            //consumer在自己的接口实现类的方法里面调用Provider服务提供的功能
            String result = demoService.demo("测试Provider功能接口");
            System.out.println(result);
        }
    }
    

    Test:测试类

    package com.sccl.consumer.test;
    
    import com.sccl.consumer.service.impl.TestServiceImpl;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**测试Consumer
     * Create by wangbin
     * 2019-10-23-0:44
     */
    public class Test {
        public static void main(String[] args) {
            //启动Spring容器,加载Consumer的spring配置文件
            ApplicationContext ac = new ClassPathXmlApplicationContext("dubbo-consumer.xml");
            //从容器中获取实现类
            TestServiceImpl testProviderService = ac.getBean("testServiceImpl", TestServiceImpl.class);
            //调用实现类的test()方法
            testProviderService.test();
        }
    }
    

      1.4 启动zookeeper注册中心,启动dubbo-provider服务方,启动监控 Dubbo Admin,Consumer在自己的实现类中调用服务方的接口,并通过注册中心创建服务方接口的代理类对象,从而调用到服务方提供的功能(但是又不知道具体实现)

    启动注册中心 启动tomcat,即可访问dubbo admin-1 启动tomcat,即可访问dubbo admin-2 启动tomcat,即可访问dubbo admin-3 启动Provider服务方 consumer通过代理对象调用到了Provider的服务
    2.创建Consumer消费者,Web项目
    创建dubbo-consumer-web模块
      2.1 新建一个dubbo-consumer-web模块的Web项目,打包方式为war,在pom.xml中引入依赖,

      注意:新建这个dubbo-consumer-web项目时也不要选择maven的骨架,选骨架生成maven项目会比较慢,直接先创建成一个普通的java项目,然后来进行改造:

        2.1.1 创建好dubbo-consumer-web模块之后,右键单击,选择Open Module Settings,如下:

    Open Module Settings
        2.1.2 在打开的页面中,先选择dubbo-consumer-web,然后点击左上角的+号,选择web,如下:
    添加Web

        2.1.3 在新打开的页面中,做如下操作:

    给Web目录配置路径
        2.1.4 修改web.xml文件的路径:
    修改web.xml的路径
        2.1.5 将dubbo-consumer-web模块的src\mian\java目录设置为源代码目录,src\main\resources目录设置为资源文件目录
    image.png

    OK ,至此,我们就将dubbo-consumer-web成功的改造成了一个web项目,此时我们的项目结构如下:

    maven多模块项目结构

        2.1.6 在pom.xml中除了ssm的依赖添加dubbo相关3个依赖(接口,dubbo.jar,zkClient)

    dubbo-consumer-web的pom.xml文件,由于是web项目了,所以不需要添加springmvc的依赖了

    <?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>
        <packaging>war</packaging>
        <artifactId>dubbo-consumer-web</artifactId>
    
        <dependencies>
            <!--消费者项目也需要依赖接口项目,才能创建代理,调用功能-->
            <dependency>
                <groupId>com.sccl</groupId>
                <artifactId>dubbo-service</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!--消费者项目也需要依赖dubbo-->
            <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>
            
            <!-- 消费者需要订阅服务,所以也需要访问zookeeper的客户端jar依赖 -->
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.10</version>
            </dependency>
        </dependencies>
    </project>
    
      2.2 web.xml中修改<init-value>dubbo-*.xml
            <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dubbo-*.xml</param-value>
        </context-param>
    
      2.3 spring配置文件命名为dubbo-spring.xml,配置dubbo的配置文件dubbo-XXX.xml

    dubbo-consumer-web.xml

        <!-- 给当前Provider自定义个名字 -->
        <dubbo:application name="dubbo-consumer"/>
        <!-- 配置注册中心  -->
        <dubbo:registry address="192.168.139.130:2181" protocol="zookeeper"></dubbo:registry>
        <!-- 配置注解扫描 -->
        <dubbo:annotation package="com.sccl.service.impl"/>
    
      2.4 不需要编写mapper
      2.5 除了ServiceImpl中引用Provider中接口对象改变,其他代码都一样.
    在实现类中调用Provider的接口代理对象

    相关文章

      网友评论

          本文标题:06-Consumer搭建

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