阿里巴巴 Dubbo框架demo详解和Zookeeper启动

三个module:

 

service:定义接口

 

provider:定义接口实现

 

consumer:模拟接口调用

 

 

1:service

只是象征性的定义了一个接口:

 

Java代码   收藏代码
  1. package com.tch.test.dubbo.service;  
  2.   
  3. public interface DemoService {  
  4.   
  5.     String sayHello(String name);  
  6.   
  7. }  

 

 

2:provider:

 

pom.xml:

 

Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>com.tch.test.dubbo</groupId>  
  3.     <artifactId>service</artifactId>  
  4.     <version>0.0.1-SNAPSHOT</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>com.alibaba</groupId>  
  8.     <artifactId>dubbo</artifactId>  
  9.     <version>2.8.4</version>  
  10. </dependency>  
  11. <dependency>  
  12.     <groupId>com.101tec</groupId>  
  13.     <artifactId>zkclient</artifactId>  
  14.     <version>0.7</version>  
  15. </dependency>  

 

 

还有一个接口的简单实现:

 

Java代码   收藏代码
  1. package com.tch.test.dubbo.provider.serviceimpl;  
  2.   
  3. import com.tch.test.dubbo.service.DemoService;  
  4.   
  5. public class DemoServiceImpl implements DemoService {  
  6.   
  7.     public String sayHello(String name) {  
  8.   
  9.         return "Hello " + name;  
  10.   
  11.     }  
  12.   
  13. }  

 

 

然后是spring配置文件applicationContext.xml,里面保护了dubbo的配置,我这里使用到了本地localhost的zookeeper,端口是默认的2181,如果不用zookeeper的话,直接将

 

Xml代码   收藏代码
  1. <dubbo:registry address="zookeeper://localhost:2181" check="false"></dubbo:registry>  

 

这句话注释掉,将

 

Xml代码   收藏代码
  1. <dubbo:registry address="multicast://224.5.6.7:1234" />  

 

放开即可。至于为什么建议zookeeper部署奇数台,是因为根据zookeeper的leader选举算法,由于zookeeper挂掉一半的机器集群就不可用,所以部署4台和3台的集群都是在挂掉2台后集群不可用,所以使用奇数台机器,不浪费资源

 

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  6.         http://code.alibabatech.com/schema/dubbo  
  7.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  8.     <!-- 提供方应用信息,用于计算依赖关系 -->  
  9.     <dubbo:application name="hello-world-app" />  
  10.     <!-- 使用multicast广播注册中心暴露服务地址 -->  
  11.     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
  12.     <dubbo:registry address="zookeeper://localhost:2181" check="false"></dubbo:registry>  
  13.     <!-- 用dubbo协议在20880端口暴露服务 -->  
  14.     <dubbo:protocol name="dubbo" port="20880" />  
  15.     <!-- 声明需要暴露的服务接口 -->  
  16.     <dubbo:service interface="com.tch.test.dubbo.service.DemoService"  
  17.         ref="demoService" />  
  18.     <!-- 和本地bean一样实现服务 -->  
  19.     <bean id="demoService" class="com.tch.test.dubbo.provider.serviceimpl.DemoServiceImpl" />  
  20. </beans>  

 

 

然后是provider的测试类:

 

Java代码   收藏代码
  1. package com.tch.test.dubbo.provider.test;  
  2.   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.   
  5. public class Provider {  
  6.   
  7.     public static void main(String[] args) throws Exception {  
  8.         ClassPathXmlApplicationContext context = null;  
  9.         try {  
  10.             context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });  
  11.             context.start();  
  12.             context.registerShutdownHook();  
  13.             System.in.read();  
  14.         } catch (Exception e) {  
  15.             e.printStackTrace();  
  16.         }finally{  
  17.             context.close();  
  18.         }  
  19.     }  
  20. }  

 

 

 

3:consumer:

 

pom.xml和provider一样:

 

Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>com.tch.test.dubbo</groupId>  
  3.     <artifactId>service</artifactId>  
  4.     <version>0.0.1-SNAPSHOT</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>com.alibaba</groupId>  
  8.     <artifactId>dubbo</artifactId>  
  9.     <version>2.8.4</version>  
  10. </dependency>  
  11. <dependency>  
  12.     <groupId>com.101tec</groupId>  
  13.     <artifactId>zkclient</artifactId>  
  14.     <version>0.7</version>  
  15. </dependency>  

 

 

然后是spring配置文件applicationContext.xml:

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  6.         http://code.alibabatech.com/schema/dubbo  
  7.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  8.     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
  9.     <dubbo:application name="consumer-of-helloworld-app" />  
  10.     <!-- 使用multicast广播注册中心暴露发现服务地址 -->  
  11.     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
  12.     <dubbo:registry address="zookeeper://localhost:2181" check="false"></dubbo:registry>  
  13.     <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->  
  14.     <dubbo:reference id="demoService"  
  15.         interface="com.tch.test.dubbo.service.DemoService" />  
  16. </beans>  

 

 

最后是consumer的测试类:

 

Java代码   收藏代码
  1. package com.tch.test.dubbo.consumer.test;  
  2.   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.   
  5. import com.tch.test.dubbo.service.DemoService;  
  6.   
  7. public class Consumer {  
  8.   
  9.     public static void main(String[] args) throws Exception {  
  10.         ClassPathXmlApplicationContext context = null;  
  11.         try {  
  12.             context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });  
  13.             context.start();  
  14.             context.registerShutdownHook();  
  15.             DemoService demoService = (DemoService) context.getBean("demoService"); // 获取远程服务代理  
  16.             String hello = demoService.sayHello("world"); // 执行远程方法  
  17.             System.out.println(hello); // 显示调用结果  
  18.             context.stop();  
  19.         } catch (Exception e) {  
  20.             e.printStackTrace();  
  21.         }finally{  
  22.             if(context != null){  
  23.                 context.close();  
  24.             }  
  25.         }  
  26.   
  27.     }  
  28.   
  29. }  

 

 

 

接下来,先运行Provider.java,在运行Consumer.java即可看到调用结果(当前前提是zookeeper是启动的啦):

 

Hello world


2、下载Zookeeper,打开Zookeeper目录下的bin目录,WINDOWS系统下面,点击zkServer.cmd,启动Zookeeper;

      linux系统下面,点击bin目录下的zkServer.sh,启动Zookeeper。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值