先说明两点,本节主要是开发知识,目的在于让大家深入理解测试的前提,先不用弄清楚具体的知识点,但是希望读者可以按照我的搭建思路模仿一遍,最好可以理解以下两个的开发思路。
- 服务提供者、消费者、接口架构分离,但是相互依赖;
- 所有与工程管理相关的内容都使用 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,先行理解即可,毕竟解决方案要作用于实际项目才能发挥其最大作用。