在这一篇主要讲解怎么配置运行一个dubbo程序(在此之前,大家首先去下载zookeeper注册中心,并且安装好,我这里用的是公司的注册中心IP)
首先是provider层的一些配置
Provider:
首先建立了一个maven项目,因为Dubbo需用Spring去加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载,所以
在pom里面配置spring相关的配置
org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现
org.springframework.asm——spring2.5.6的时候需要asm jar包,spring3.0开始提供它自己独立的asm jar包
org.springframework.core——Spring的核心工具包,其他包依赖此包
org.springframework.beans——所有应用都用到,包含访问配置文件,创建和管理bean等,是Spring IOC的基础实现。
org.springframework.context——提供在基础IOC功能上的扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、
JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。
org.springframework.expression——Spring表达式语言
还有dubbo的配置,用的dubbo版本是2.5.3版本
Zookeeper配置,用的是3.3.6版本
pom文件代码
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.provider</groupId> <artifactId>provider</artifactId> <version>1.0-SNAPSHOT</version> <name>dubboserver</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.1.4.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <!-- spring end --> <!-- log --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <!-- zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.6</version> </dependency> </dependencies> <build> <finalName>dubbo-demo</finalName> <plugins> <!-- 非多个资源配置 start--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <source>1.5</source> <target>1.5</target> <encoding>UTF-8</encoding> <failOnError>false</failOnError> </configuration> </plugin> <!-- 非多个资源配置 end--> </plugins> </build> </project>
然后呢配置ApplicationContext.xml的配置文件信息
Provider:
主要配置四个方面的东西,
(1) 具体的实现bean
(2) 提供方的应用信息,提供依赖关系
(3) 使用zookeeper注册中心暴露接口
(4) 用dubbo协议在某个端口暴露服务
(5) 声明需要暴露的服务接口
<?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="testService" class="com.provider.dubbo.serviceImpl.TestServiceImpl" /> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="providerTest" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://IP地址" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20885" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.provider.dubbo.service.TestService" ref="testService" /> </beans>
然后就是提供者需要提供什么接口了
首先我定义了一个ServiceTest接口
package com.provider.dubbo.service; /** * Created by WUYAO873 on 2017/8/14. */ public interface TestService { public String getName(); }
package com.provider.dubbo.serviceImpl; import com.provider.dubbo.service.TestService; import java.io.Serializable; /** * Created by WUYAO873 on 2017/8/14. */ public class TestServiceImpl implements TestService,Serializable { public String getName() { return "我是提供者"; } }
最后建立了一个测试类TestServiceTest
package com.provider.dubbo; import java.io.IOException; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Created by WUYAO873 on 2017/8/14. */ public class TestServiceTest { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[]{"applicationContext.xml"}); context.start(); System.out.println("提供服务者已经注册"); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } } }
这个是整个provider结构图
下面我们配置消费者
Consumer:
消费者层的配置pom配置和提供者的配置类似(可以拷贝),只是增加了一个依赖包,依赖于providor的groupId,artifactId和Version.
然后基本的版本配置就是这样,接下来需要配置一些bean信息和zookeeper的信息,配置在applicationContxt.Xml里面
Consumer的ApplicationContext.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="consumer" /> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry protocol="zookeeper" address="zookeeper://ID地址" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="testService" interface="com.provider.dubbo.service.TestService" /> </beans>
package com.provider.dubbo.service; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; public class ConsumerServiceTest { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "applicationContext.xml" }); context.start(); TestService testService = (TestService) context.getBean("testService"); System.out.println(testService.getName()); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } } }
这是整个Consumer的结构图
这样下来我们就配置好了,
接下来我们先要启动zookeeper注册中心,
然后启动我们的提供者provider的测试类TestServiceTest
这样呢,我们就已经把接口暴露在了注册中心,我们在消费者就可以拿到
这个时候我们就可以早zookeeper的注册中心查到自己注册的提供者
(1)
(2)
也可以根据你在provider的配置文件里面的提供者应用名查询
运行消费者的ConsumerServiceTest类
运行成功,得到提供者的提供信息,
我这里用的zookeeper注册中心是用公司的IP地址,大家在需要的时候可以去官网下载安装