`

dubbo 笔记一 简单应用demo

    博客分类:
  • soa
阅读更多

 

一.dubbo架构



 

节点角色说明:

       Provider: 暴露服务的服务提供方。

       Consumer: 调用远程服务的服务消费方。

       Registry: 服务注册与发现的注册中心。

       Monitor: 统计服务的调用次调和调用时间的监控中心。

       Container: 服务运行容器。

调用关系说明:

      0 服务容器负责启动,加载,运行服务提供者。

     1. 服务提供者在启动时,向注册中心注册自己提供的服务。

     2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

     3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数          据给消费者。

    4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用          失败,再选另一台调用。

     5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监         控中心。

 

同类项目:

 

二.dubbo使用方法

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

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

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

           2.定义服务提供者接口、实现、定义dubbo-spring的配置文件

             注:服务提供者接口需被服务消费者共享到,服务消费者的配置才能找到接口(用maven的话就把服务提供者接口打jar包,服务消费者依赖这个jar)

  1. package com.unj.dubbotest.provider;  
  2.   
  3. import java.util.List;  
  4.   
  5. public interface DemoService {  
  6.   
  7.     String sayHello(String name);  
  8.   
  9.     public List getUsers();  
  10.   
  11. }  


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

 

  1. package com.unj.dubbotest.provider;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.LinkedList;  
  5. import java.util.List;  
  6.   
  7.   
  8. public class DemoServiceImpl implements DemoService{  
  9.       
  10.      public String sayHello(String name) {  
  11.             return "Hello " + name;  
  12.      }  
  13.      public List getUsers() {  
  14.          List list = new ArrayList();  
  15.          User u1 = new User();  
  16.          u1.setName("jack");  
  17.          u1.setAge(20);  
  18.          u1.setSex("男");  
  19.            
  20.          User u2 = new User();  
  21.          u2.setName("tom");  
  22.          u2.setAge(21);  
  23.          u2.setSex("女");  
  24.            
  25.          User u3 = new User();  
  26.          u3.setName("rose");  
  27.          u3.setAge(19);  
  28.          u3.setSex("女");  
  29.            
  30.          list.add(u1);  
  31.          list.add(u2);  
  32.          list.add(u3);  
  33.          return list;  
  34.      }  
  35. }  

 

              用Spring配置声明暴露服务:
  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"  
  4.     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  7.         http://code.alibabatech.com/schema/dubbo  
  8.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
  9.         ">  
  10.    
  11.     <!-- 具体的实现bean -->  
  12.     <bean id="demoService" class="com.unj.dubbotest.provider.DemoServiceImpl" />  
  13.       
  14.     <!-- 提供方应用信息,用于计算依赖关系 -->  
  15.     <dubbo:application name="xixi_provider"  />  
  16.    
  17.     <!-- 使用multicast广播注册中心暴露服务地址   
  18.     <dubbo:registry address="multicast://224.5.6.7:1234" />-->  
  19.     
  20.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
  21.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />   
  22.     
  23.     <!-- 用dubbo协议在20880端口暴露服务 -->  
  24.     <dubbo:protocol name="dubbo" port="20880" />  
  25.    
  26.     <!-- 声明需要暴露的服务接口 -->  
  27.     <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" />  
  28.       
  29. </beans>  
            加载Spring配置,启动服务:
  1. package com.unj.dubbotest.provider;  
  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 = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});  
  9.         context.start();  
  10.    
  11.         System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟  
  12.     }  
  13.    
  14. }  

       3.定义服务消费者

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

  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="hehe_consumer" />  
  12.   
  13.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
  14.     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
  15.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
  16.   
  17.     <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->  
  18.     <dubbo:reference id="demoService"  
  19.         interface="com.unj.dubbotest.provider.DemoService" />  
  20.   
  21. </beans>  

              加载Spring配置,并调用远程服务:
  1. package com.alibaba.dubbo.demo.pp;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. import com.unj.dubbotest.provider.DemoService;  
  8.   
  9. public class Consumer {  
  10.   
  11.     public static void main(String[] args) throws Exception {  
  12.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  13.                 new String[] { "applicationContext.xml" });  
  14.         context.start();  
  15.   
  16.         DemoService demoService = (DemoService) context.getBean("demoService"); //  
  17.         String hello = demoService.sayHello("tom"); // ִ  
  18.         System.out.println(hello); //   
  19.   
  20.         //   
  21.         List list = demoService.getUsers();  
  22.         if (list != null && list.size() > 0) {  
  23.             for (int i = 0; i < list.size(); i++) {  
  24.                 System.out.println(list.get(i));  
  25.             }  
  26.         }  
  27.         // System.out.println(demoService.hehe());  
  28.         System.in.read();  
  29.     }  

 

dubbo 官网:http://dubbo.io/

dubbo  git 例子地址:https://github.com/dubbo

dubbo   git 源码地址:https://github.com/alibaba/dubbo

 

 

本文参考  地址:http://www.cnblogs.com/Javame/p/3632473.html

 

 

  • 大小: 68.9 KB
  • 大小: 147.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics