06-Consumer搭建

Consumer的搭建過程

1.創(chuàng)建Consumer消費者,普通java項目
新建dubbo-consumer模塊

dubbo-consumer

??1.1 第一次新建我們使用普通jar類型的java項目來測試,等會兒再建成war項目,在pom.xml中引入依賴,主要還是引入dubbo相關(guān)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>
        <!--消費者項目也需要依賴接口項目,才能創(chuàng)建代理,調(diào)用功能-->
        <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里面的內(nèi)容

復制dubbo-provider.xml并重命名為dubbo-consumer.xml

dubbo-consumer.xml文件中的配置內(nèi)容

<?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所要遵循的標簽規(guī)范.
    xsi:schemaLocation:指定的命名空間對應的驗證文件,用來定義xml schema的地址,
    也就是xml書寫時需要遵循的語法,用于聲明了目標命名空間的模式文檔。。兩部分組成,
    前面部分就是命名空間的名字,后面是xsd(xmlschema)的地址,
    也是就表示把定義這個命名空間的schema文件給引用進來,
    好讓eclipse這類型工具能夠解析和驗證你的xml文件是否符合語法規(guī)范。
    等同于。用于聲明了目標命名空間的模式文檔。
    在xsi:schemaLocation后面配置的字符串都是成對的,前面的是命名空間的URI,后面是xsd文件的URI;
小結(jié):給引入的xml文檔聲明一個命名空間,并指定xml文件遵循的規(guī)范,
以及指定xml文件的位置
    -->

    <!--給當前consumer自定義一個名稱-->
    <dubbo:application name="dubbo-consumer"/>
    <!--consumer需要訂閱服務,所以需要配置注冊中心-->
    <!--配置注冊中心 暴露注冊服務地址-->
    <dubbo:registry address="192.168.0.106:2181" protocol="zookeeper"/>
    <!--consumer可以通過注冊中心獲取到的服務列表,知道服務方的地址,所以
    不用配置服務方的暴露服務的端口信息了-->

    <!--服務消費者方配置dubbo的注解驅(qū)動,服務提供者使用dubbo的注解會與Spring
    的注解有沖突所以不能用,但是消費者方?jīng)]有沖突,所以能用-->
    <!--配置注解掃描,掃描消費者方包下接口的實現(xiàn)類-->
    <dubbo:annotation package="com.sccl.consumer.service.impl"/>
    <!--配置consumer方的實現(xiàn)類,交給Spring容器管理-->
    <bean id="testServiceImpl" class="com.sccl.consumer.service.impl.TestServiceImpl"/>
</beans>

??1.3 在dubbo-consumer項目中新建service接口和impl,以及測試類

接口,實現(xiàn)類,測試類

TestService:接口

package com.sccl.consumer.service;

/**
 * Create by wangbin
 * 2019-10-23-0:31
 */
public interface TestService {
    void test();
}

TestServiceImpl:實現(xiàn)類

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的注解,表示從注冊中心獲取該接口的代理對象,通過代理對象調(diào)用方法
    private DemoService demoService;//聲明Provider方的接口
    @Override
    public void test() {
        //consumer在自己的接口實現(xiàn)類的方法里面調(diào)用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");
        //從容器中獲取實現(xiàn)類
        TestServiceImpl testProviderService = ac.getBean("testServiceImpl", TestServiceImpl.class);
        //調(diào)用實現(xiàn)類的test()方法
        testProviderService.test();
    }
}

??1.4 啟動zookeeper注冊中心,啟動dubbo-provider服務方,啟動監(jiān)控 Dubbo Admin,Consumer在自己的實現(xiàn)類中調(diào)用服務方的接口,并通過注冊中心創(chuàng)建服務方接口的代理類對象,從而調(diào)用到服務方提供的功能(但是又不知道具體實現(xiàn))

啟動注冊中心
啟動tomcat,即可訪問dubbo admin-1
啟動tomcat,即可訪問dubbo admin-2
啟動tomcat,即可訪問dubbo admin-3
啟動Provider服務方
consumer通過代理對象調(diào)用到了Provider的服務
2.創(chuàng)建Consumer消費者,Web項目
創(chuàng)建dubbo-consumer-web模塊
??2.1 新建一個dubbo-consumer-web模塊的Web項目,打包方式為war,在pom.xml中引入依賴,

??注意:新建這個dubbo-consumer-web項目時也不要選擇maven的骨架,選骨架生成maven項目會比較慢,直接先創(chuàng)建成一個普通的java項目,然后來進行改造:

????2.1.1 創(chuàng)建好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項目,此時我們的項目結(jié)構(gòu)如下:

maven多模塊項目結(jié)構(gòu)

????2.1.6 在pom.xml中除了ssm的依賴添加dubbo相關(guān)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>
        <!--消費者項目也需要依賴接口項目,才能創(chuàng)建代理,調(diào)用功能-->
        <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中接口對象改變,其他代碼都一樣.
在實現(xiàn)類中調(diào)用Provider的接口代理對象
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容