先說明兩點,本節主要是開發知識,目的在於讓大家深入理解測試的前提,先不用弄清楚具體的知識點,但是希望讀者可以按照我的搭建思路模仿一遍,最好可以理解以下兩個的開發思路。
- 服務提供者、消費者、接口架構分離,但是相互依賴;
- 所有與工程管理相關的內容都使用 Maven 進行。
建立思路
建立三個工程,分別為:
- 定義一個接口工程,主要是作為模板;
- 創建一個服務提供者,暴露 Dubbo 服務;
- 創建一個服務消費者,調用 Dubbo 服務。
要求這三個工程都建立為 Maven 工程,可以供其相互引用。
接口工程創建
具體過程如下。
(1)通過 Eclipse 創建一個 Maven 工程(創建過程請參考服務提供者工程),命名為:interface-test;在其下面建立一個包,命名為:com.interface.demo,然后只新建一個接口,命名為 DubboService.java;
(2)DubboService.java 文件的代碼如下,只聲明一個 print() 方法:
package com.inter.face.demo; public interface DubboService { public abstract void print(); }
(3)選擇此工程 | 右鍵單擊 | Run as | Maven install 選項,將其打為 jar 包,以供服務提供者工程與消費者工程進行引用:
生成 jar 包后,會在工程的 target 目錄下進行顯示:
(4)將 interface-test-0.01-SNAPSHOT.jar 這個 jar 放到本地 Maven 倉庫中, 放置方法為:
- cd 到 interface-test-0.01-SNAPSHOT.jar 所在目錄下,
執行 mvn install:install-file -Dfile=interface-test-0.0.1-SNAPSHOT.jar -DgroupId=com.test.demo -DartifactId=interfaceTest -Dversion=0.0.1 -Dpackaging=jar 命令即可;
- 執行成功,可以在 Maven 的本地倉庫中找到此 jar 包:
完成以上四步,接口工程即創建完畢。
Dubbo 服務提供者創建
下面我們搭建開發一個簡單的 Dubbo 服務提供者,具體過程如下:
(1)通過 Eclipse 創建一個 Maven 工程,命名為:dubbo-provider。
簡單說下創建過程:
- File | new | Maven 工程(最新的 Eclipse4.7.2 即會顯示),如果 new 里面沒有顯示 Maven 工程,就到 new | Other 里面去找:
- New Maven Project 界面,選擇下圖標注的版本,單擊 next 按鈕即可:
- 設置 dubbo-provider 的 Maven 依賴:
按照上圖中的標注內容填寫后,單擊 Finish 按鈕,創建完成,其目錄結構如下所示:
(2)在 pom.xml 文件中引入 interface-test-0.01-SNAPSHOT.jar、dubbo 服務的 jar、zkclient 的 jar、spring-beans.jar:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>com.interface.demo</groupId> <artifactId>interface-test</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.2.3.RELEASE</version> </dependency> </dependencies>
需要注意的是:所有的 Maven 依賴的 jar 都必須寫在: <dependencies> </dependencies>之間,還需要說明的是 Maven 通過 pom.xml 文件所引用的 jar 必須先存在於本地的 Maven 倉庫中,或在一個私服中。
(3)在 src/main/java 下的包 com.dubbo.provider.dubbo_provider 下新建接口 DubboService.java 的實現類 DubboServiceImpl.java。其源碼為:
public class DubboServiceImpl implements DubboService { public void print() { System.out.println("我是服務提供者"); } }
(4)新建源文件夾 src/main/resources,在其下面新建 applicationProvider.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: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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 具體實現的bean --> <bean id="dubboservice" class="com.dubbo.provider.dubbo_provider.DubboServiceImpl" /> <!-- 定義應用名稱 --> <dubbo:application name="dubbo-provider"/> <!--zk注冊中心的地址--> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" /> <!-- 用dubbo協議在21000端口暴露服務 --> <dubbo:protocol name="dubbo" port="21000" /> <!-- 配置服務接口 --> <dubbo:service interface="com.inter.face.demo.DubboService" ref="dubboservice" /> </beans>
(5)在 src/test/java 下的包 com.dubbo.provider.dubbo_provider 下新建啟動服務的測試類 TestProvider.java;源碼如下:
public class TestProvider { public static void main(String[] args) throws Exception { //獲得Spring中定義的bean對象,此代碼就是讀取我們配置的服務提供者文件 ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("classpath:applicationProvider.xml"); // context.start(); System.out.println("任意鍵退出"); System.in.read(); } }
(6)啟動 Zookpeer,然后啟動 TestProvider.java,驗證注冊 Zookpeer 成功:
可見已經成功注冊到 ZK 上。
然后選擇此工程 | 右鍵單擊 | Run as | Maven install 命令,將其打為 jar 包,此時此工程的目錄結構如下:
Dubbo 消費者創建
下面進行消費者創建,具體步驟如下:
(1)通過 Eclipse 創建一個 Maven 工程,命名為:dubbo-consumer(創建過程請參考 dubbo-provider):
(2)將服務提供者的 pom.xml 文件直接復制給它;
(3)新建源文件夾 src/main/resources,在其下面新建 applicationConsumer.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: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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 定義應用名稱 --> <dubbo:application name="dubbo-consumer"/> <!--zk注冊中心的地址--> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" /> <!-- 用dubbo協議在21000端口暴露服務 --> <dubbo:protocol name="dubbo" port="21000" /> <!-- 配置服務接口 --> <dubbo:reference interface="com.inter.face.demo.DubboService" id="dubboservice" /> </beans>
(4)在 src/test/java 下的包 com.consumer.demo.dubbo_consumer
下新建調用服務提供者的測試類 TestConsumer.java,源碼如下:
public class TestConsumer { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationConsumer.xml"); context.start(); DubboService demoService = (DubboService)context.getBean("dubboservice"); demoService.print(); } }
(5)運行 TestConsumer.java,驗證是否可以調通服務提供者:
然后選擇此工程 | 右鍵 | Run as | Maven install,將其打為 jar 包,此時此工程的目錄結構如下:
致此,接口、Dubbo 消費者、Dubbo 服務者就開發完成了。
源碼地址
總結
本章意在讓大家掌握 Dubbo 的開發原理,而后深刻理解使用 JMeter 測試 Dubbo 服務的過程;當然如果您正在測試 Dubbo 項目,那么這一章對您的幫助是不言而喻的,如果沒在使用 Dubbo,先行理解即可,畢竟解決方案要作用於實際項目才能發揮其最大作用。