06-Consumer搭建
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-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在自己的实现类中调用服务方的接口,并通过注册中心创建服务方接口的代理类对象
,从而调用到服务方提供的功能(但是又不知道具体实现)
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,如下:
2.1.2 在打开的页面中,先选择
dubbo-consumer-web
,然后点击左上角的+号,选择web,如下:添加Web
2.1.3 在新打开的页面中,做如下操作:
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项目,此时我们的项目结构如下:
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"/>