首页 > 代码库 > dubbo使用方法

dubbo使用方法

 dubbo使用方法。

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。如果不想使用Spring配置,而希望通过API的方式进行调用(不推荐),可以参见:

http://code.alibabatech.com/wiki/display/dubbo/User+Guide-zh#UserGuide-zh-API%E9%85%8D%E7%BD%AE

下面我们就来看看spring配置方式的写法。

 

 

服务提供者:

 

1. 下载zookeeper注册中心,下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/  下载后解压即可,进入D:\Tools\zookeeper\zookeeper-3.4.5\bin,

双击zkServer.cmd启动注册中心服务。

 

定义服务接口:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.liangbinny.dubbotest.provider;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.liangbinny.dubbotest.provider.impl.User;  
  6.   
  7. public interface DemoService {  
  8.     String sayHello(String name);  
  9.   
  10.     public List<User> getUsers();  
  11. }  


在服务提供方实现接口:(对服务消费方隐藏实现)

 

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.liangbinny.dubbotest.provider.impl;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.liangbinny.dubbotest.provider.DemoService;  
  7.   
  8. public class DemoServiceImpl implements DemoService {  
  9.   
  10.     public String sayHello(String name) {  
  11.         return "Hello " + name;  
  12.     }  
  13.   
  14.     public List<User> getUsers() {  
  15.         List<User> list = new ArrayList<User>();  
  16.   
  17.         User user = new User();  
  18.         user.setAge(28);  
  19.         user.setName("liangbinny");  
  20.         list.add(user);  
  21.   
  22.         user = new User();  
  23.         user.setAge(27);  
  24.         user.setName("binny");  
  25.         list.add(user);  
  26.           
  27.         return list;  
  28.     }  
  29.   
  30. }  



 

用Spring配置声明暴露服务:

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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.   
  10.     <!-- 具体的实现bean -->  
  11.     <bean id="demoService" class="com.liangbinny.dubbotest.provider.impl.DemoServiceImpl" />  
  12.   
  13.     <!-- 提供方应用信息,用于计算依赖关系 -->  
  14.     <dubbo:application name="dubbo_provider" />  
  15.   
  16.     <!-- 使用multicast广播注册中心暴露服务地址 <dubbo:registry address="multicast://224.5.6.7:1234"   
  17.         /> -->  
  18.   
  19.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
  20.     <dubbo:registry address="zookeeper://10.102.30.211:2181" />  
  21.   
  22.     <!-- 用dubbo协议在20880端口暴露服务 -->  
  23.     <dubbo:protocol name="dubbo" port="20880" />  
  24.   
  25.     <!-- 声明需要暴露的服务接口 ,对应的具体实现类是自定义bean:demoService -->  
  26.     <dubbo:service interface="com.liangbinny.dubbotest.provider.DemoService" ref="demoService" />  
  27.   
  28. </beans>  



 

 

加载Spring配置,启动服务:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.liangbinny.dubbotest.provider.impl;  
  2.   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.   
  5. public class Provider {  
  6.     public static void main(String[] args) {  
  7.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });  
  8.         context.start();  
  9.         // 为保证服务一直开着,一直循环等待  
  10.         synchronized (Provider.class) {  
  11.             while (true) {  
  12.                 try {  
  13.                     Provider.class.wait();  
  14.                 } catch (Throwable e) {  
  15.                 }  
  16.             }  
  17.         }  
  18.     }  
  19. }  



 

整个服务端的项目图如下:

 

 

服务端开发好后,提供对应的jar包给消费端,提供对应的接口。

导出服务端项目为jar包即可。

 

 

 

新建消费端项目,依赖的jar包有:

 

其中包括刚刚导出的dubbo-server.jar包

 

 

服务消费者:

 

 

1.通过Spring配置引用远程服务:

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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.   
  10.     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
  11.     <dubbo:application name="dubbo_consumer" />  
  12.   
  13.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
  14.     <dubbo:registry address="zookeeper://10.102.30.211:2181" />  
  15.   
  16.     <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->  
  17.     <dubbo:reference id="demoService" interface="com.liangbinny.dubbotest.provider.DemoService" />  
  18.   
  19. </beans>  



 

2.加载Spring配置,并调用远程服务:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.liangbinny.dubbotest.consumer;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. import com.liangbinny.dubbotest.provider.DemoService;  
  8. import com.liangbinny.dubbotest.provider.impl.User;  
  9.   
  10. public class Consumer {  
  11.     public static void main(String[] args) {  
  12.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });  
  13.         context.start();  
  14.           
  15.         DemoService demoService = (DemoService) context.getBean("demoService");  
  16.         String hello = demoService.sayHello("tom");  
  17.         System.out.println(hello);  
  18.   
  19.         List<User> list = demoService.getUsers();  
  20.         System.out.println(list);  
  21.     }  
  22. }  

 

 

调用结果

 

 

1、下载dubbo控制台管理war包

 

http://download.csdn.net/detail/liweifengwf/7784901

官方地址:http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-admin/2.4.1/dubbo-admin-2.4.1.war(这个地址我一直下不了,wget也不通)

 

下载绿色版tomcat,并解压,删掉apache-tomcat-6.0.37\webapps\ROOT文件夹下的内容,并将dubbo-admin-2.4.1.war解压后,解压出的文件放在ROOT文件夹下

 

修改apache-tomcat-6.0.37\webapps\ROOT\WEB-INF下的dubbo.properties文件的zookeeper地址

dubbo.registry.address=zookeeper://10.102.30.211:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

 

2、启动

 

先启动zookeeper,再启动tomcat

 

访问:

http://localhost:8080

 

    登录密码默认是:root/root

 

 

可以看到控制台管理界面,

 

这时候可以启动上篇文章中的提供者和消费者,再在dubbo管理控制台界面可以看到

 

提供者

 

消费者

 

 

Zookeeper单机配置:

<dubbo:registryaddress="zookeeper://10.20.153.10:2181"/>

Or:

<dubbo:registryprotocol="zookeeper"address="10.20.153.10:2181"/>



Zookeeper集群配置:

<dubbo:registryaddress="zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181"/>

Or:

 

<dubbo:registryprotocol="zookeeper"address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181"/>

 

 

同一Zookeeper,分成多组注册中心:

 

<dubbo:registryid="chinaRegistry"protocol="zookeeper"address="10.20.153.10:2181"group="china"/>
<dubbo:registryid="intlRegistry"protocol="zookeeper"address="10.20.153.10:2181"group="intl"/>

 

dubbo使用方法