Consumer的搭建過程
1.創(chuàng)建Consumer消費者,普通java項目


??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-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,以及測試類

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))






2.創(chuàng)建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,如下:

????2.1.2 在打開的頁面中,先選擇
dubbo-consumer-web,然后點擊左上角的+號,選擇web,如下:
????2.1.3 在新打開的頁面中,做如下操作:

????2.1.4 修改web.xml文件的路徑:

????2.1.5 將
dubbo-consumer-web模塊的src\mian\java目錄設置為源代碼目錄,src\main\resources目錄設置為資源文件目錄
OK ,至此,我們就將dubbo-consumer-web成功的改造成了一個web項目,此時我們的項目結(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中接口對象改變,其他代碼都一樣.
