您的位置:首页 > 编程语言 > Java开发

zookeeper与dubbo结合实例

2017-08-13 18:38 309 查看
dubbo是阿里开源的一个分布式服务框架,使用它可以完成远程服务调用(RPC)。今天来写一下这种分布式开发的demo

RPC可以简单理解为,两个不同工程之间代码的中的方法相互调用的过程。

实现的基本过程:建立两个java工程provider(生产者)和consumer(消费者),一个provider负责提供服务(service),另一个consumer可以调用provider提供的服务。

环境准备

spring的环境(这个就不说明了)

dubbo的环境

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>


zkClient的环境

没有zkClient环境会报错

Exception in thread "main" java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException


<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>


Provider服务

服务配置文件provider.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="provider"/>

<!-- 使用zookeeper暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>

<!-- 用dubbo协议在20881端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20881"/>

<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="hpu.lzl.study.service.HelloService" ref="helloService"/>

<!-- 和本地bean一样实现服务 -->
<bean id="helloService" class="hpu.lzl.study.service.impl.HelloServiceImpl"/>

</beans>


HelloService和HelloServiceImpl是一个简单的接口与实现,这里就不粘贴了。

provider的main函数

public class Provider {
public static void main( String[] args ) {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath*:provider.xml");
classPathXmlApplicationContext.start();
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}


Consumer工程

客户端配置文件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: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"  />

<!-- 使用zookeeper暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

<dubbo:reference id="helloService" interface="hpu.lzl.study.service.HelloService" />

</beans>


这里需要引入provider的HelloeService的接口类。

启动consumer的main函数

public class Consumer {
public static void main( String[] args ) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:consumer.xml");
context.start();
HelloService helloService = (HelloService) context.getBean("helloService");
helloService.sayHello("lzl");
}
}


验证调用过程

依次启动provider工程和consumer工程。并且保证dubbo的服务注册到zookeeper中,zookeeper启动端口号是配置文件中的2181端口

会发现consumer调用了provider工程中的方法。

我们还没有通过zookeeper的zkCli来查看,zookeeper所注册到的服务有哪些。



到这里,完成了简单的dubbo的分布式调用过程。

更深入的理解可以根据以下

参考博客:

http://blog.csdn.net/killuazoldyck/article/details/72773873

http://blog.csdn.net/congcong68/article/details/41113239

http://blog.csdn.net/quhongwei_zhanqiu/article/details/41683081
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dubbo 分布式 rpc-java