Dubbo01--Dubbo入门基础及实例讲解

Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

一、Dubbo简介

1.1、Dubbo是什么?

        Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架
其核心部分包含:
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

1.2. Dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

1.3. dubbo的架构

dubbo架构图如下所示:

Dubbo01--Dubbo入门基础及实例讲解_第1张图片
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。

Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。

调用关系说明:
0 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

1.4. dubbo使用方法

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

下面以一个实例来做说明,看这个实例前,建议先看看这里 Dubbo-Admin管理平台和Zookeeper注册中心的搭建

二、服务提供者

提供者的目录如下:工程下载地址:http://download.csdn.net/detail/evankaka/9054253

Dubbo01--Dubbo入门基础及实例讲解_第2张图片

其中初始化工程的创建如下:

首先,选择创建

Dubbo01--Dubbo入门基础及实例讲解_第3张图片

然后,next,记得红框打上,这里直接快速

Dubbo01--Dubbo入门基础及实例讲解_第4张图片

最后,输入项目名等

Dubbo01--Dubbo入门基础及实例讲解_第5张图片

好了,项目有了,接下来就是加代码了

1、service代码

接口层如下:ProviderService.java

[java]  view plain copy
  1. package com.lin.service;  
  2.   
  3. /** 
  4.  * 功能概要:提供者service接口层 
  5.  *  
  6.  * @author linbingwen 
  7.  * @since  2015年8月26日  
  8.  */  
  9. public interface ProviderService {  
  10.     public String sayHello(String name);  
  11.   
  12. }  

实现层如下:ProviderServiceImpl.java

[java]  view plain copy
  1. package com.lin.service;  
  2. /** 
  3.  * 功能概要:功能概要:提供者service实现层 
  4.  *  
  5.  * @author linbingwen 
  6.  * @since  2015年8月26日  
  7.  */  
  8. public class ProviderServiceImpl implements ProviderService {  
  9.   
  10.     public String sayHello(String name) {         
  11.         return “Hello:~~~~~~~~~~~~~~~~~~~~~~~~”+name+“你好,你好~~”;  
  12.     }  
  13.   
  14. }  

2、Spring配置文件-applicationProvider.xml

[java]  view plain copy
  1. “1.0” encoding=“UTF-8”?>    
  2. ”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.     ”providerService” class=“com.lin.service.ProviderServiceImpl” />    
  10.         
  11.     ”dubbo_provider”  />      
  12.     
  13.     ”multicast://localhost:1234” />–>     
  14.         
  15.     ”zookeeper://127.0.0.1:2181” />       
  16.     20880端口暴露服务 –>    
  17.     ”dubbo” port=“29014” />    
  18.         
  19.     interface=“com.lin.service.ProviderService” ref=“providerService” />    
  20.    

3、pom.xml中依赖文件

[html]  view plain copy
  1. <project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”  
  2.     xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>  
  3.     <modelVersion>4.0.0modelVersion>  
  4.     <groupId>com.lingroupId>  
  5.     <artifactId>dubbo_providerartifactId>  
  6.     <version>0.0.1-SNAPSHOTversion>  
  7.     <properties>  
  8.         <spring.version>3.2.8.RELEASEspring.version>  
  9.     properties>  
  10.   
  11.     <dependencies>  
  12.         <dependency>  
  13.             <groupId>com.alibabagroupId>  
  14.             <artifactId>dubboartifactId>  
  15.             <version>2.5.3version>  
  16.             <exclusions>  
  17.                 <exclusion>  
  18.                     <groupId>org.springframeworkgroupId>  
  19.                     <artifactId>springartifactId>  
  20.                 exclusion>  
  21.             exclusions>  
  22.         dependency>  
  23.         <dependency>  
  24.             <groupId>com.github.sgroschupfgroupId>  
  25.             <artifactId>zkclientartifactId>  
  26.             <version>0.1version>  
  27.         dependency>  
  28.           
  29.         <dependency>  
  30.             <groupId>org.springframeworkgroupId>  
  31.             <artifactId>spring-coreartifactId>  
  32.             <version>${spring.version}version>  
  33.         dependency>  
  34.         <dependency>  
  35.             <groupId>org.springframeworkgroupId>  
  36.             <artifactId>spring-beansartifactId>  
  37.             <version>${spring.version}version>  
  38.         dependency>  
  39.         <dependency>  
  40.             <groupId>org.springframeworkgroupId>  
  41.             <artifactId>spring-contextartifactId>  
  42.             <version>${spring.version}version>  
  43.         dependency>  
  44.         <dependency>  
  45.             <groupId>org.springframeworkgroupId>  
  46.             <artifactId>spring-jdbcartifactId>  
  47.             <version>${spring.version}version>  
  48.         dependency>  
  49.         <dependency>  
  50.             <groupId>org.springframeworkgroupId>  
  51.             <artifactId>spring-webartifactId>  
  52.             <version>${spring.version}version>  
  53.         dependency>  
  54.         <dependency>  
  55.             <groupId>org.springframeworkgroupId>  
  56.             <artifactId>spring-webmvcartifactId>  
  57.             <version>${spring.version}version>  
  58.         dependency>  
  59.         <dependency>  
  60.             <groupId>org.springframeworkgroupId>  
  61.             <artifactId>spring-aopartifactId>  
  62.             <version>${spring.version}version>  
  63.         dependency>  
  64.         <dependency>  
  65.             <groupId>org.springframeworkgroupId>  
  66.             <artifactId>spring-txartifactId>  
  67.             <version>${spring.version}version>  
  68.         dependency>  
  69.         <dependency>  
  70.             <groupId>org.springframeworkgroupId>  
  71.             <artifactId>spring-ormartifactId>  
  72.             <version>${spring.version}version>  
  73.         dependency>  
  74.         <dependency>  
  75.             <groupId>org.springframeworkgroupId>  
  76.             <artifactId>spring-context-supportartifactId>  
  77.             <version>${spring.version}version>  
  78.         dependency>  
  79.         <dependency>  
  80.             <groupId>org.springframeworkgroupId>  
  81.             <artifactId>spring-testartifactId>  
  82.             <version>${spring.version}version>  
  83.         dependency>  
  84.         <dependency>  
  85.             <groupId>org.springframeworkgroupId>  
  86.             <artifactId>spring-jmsartifactId>  
  87.             <version>${spring.version}version>  
  88.         dependency>  
  89.     dependencies>  
  90. project>  




4、启动提供者服务

在src/test/java下添加

ProviderServiceTest.java内容如下:

[java]  view plain copy
  1. package com.lin.service;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. /** 
  8.  * 功能概要: 
  9.  *  
  10.  * @author linbingwen 
  11.  * @since  2015年8月26日  
  12.  */  
  13. public class ProviderServiceTest {  
  14.   
  15.     /** 
  16.      * @author linbingwen 
  17.      * @since  2015年8月26日  
  18.      * @param args     
  19.      */  
  20.     public static void main(String[] args) {  
  21.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(    
  22.                 new String[]{“applicationProvider.xml”});    
  23.         context.start();   
  24.         System.out.println(”提供者服务已注册成功”);    
  25.         System.out.println(”请按任意键取消提供者服务”);    
  26.         try {  
  27.             System.in.read();//让此程序一直跑,表示一直提供服务  
  28.         } catch (IOException e) {         
  29.             e.printStackTrace();  
  30.         }    
  31.     }  
  32.   
  33. }  

运行结果:

因为我这里使用的是本地的zookeeper注册中心,所以一定要先打开它!!!一定要先打开它!!!一定要先打开它!!!打开D:\Java\Tool\zookeeper-3.4.6\bin下的zkServer.cmd,然后一直开着,不要关了!!!!!!!!!!!!!然后一直开着,不要关了!!!!!!!!!!!!!

Dubbo01--Dubbo入门基础及实例讲解_第6张图片

接着运行上面的main方法,输出如下:

Dubbo01--Dubbo入门基础及实例讲解_第7张图片

然后我们可以到注册中心去看看服务注册上去了没有。(注意,这里的zookeper注册中心在我本地电脑已搭建好,搭建过程看这里Dubbo-Admin管理平台和Zookeeper注册中心的搭建)

Dubbo01--Dubbo入门基础及实例讲解_第8张图片

Dubbo01--Dubbo入门基础及实例讲解_第9张图片

可以看到,提供者已注册成功。

三、消费者

1、还是一个maven项目,整个结构如下,工程下载地址:http://download.csdn.net/detail/evankaka/9054253

Dubbo01--Dubbo入门基础及实例讲解_第10张图片

2、Spring配置文件applicationConsumer.xml

[html]  view plain copy
  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=“dubbo_consumer” />       
  10.           
  11.     <dubbo:registry  protocol=“zookeeper” address=“zookeeper://127.0.0.1:2181” />         
  12.           
  13.     <dubbo:reference id=“providerService” interface=“com.lin.service.ProviderService” />    
  14. beans>   




3、pom.xml文件如下

[java]  view plain copy
  1. “http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”  
  2.     xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>  
  3.     4.0.0  
  4.     com.lin  
  5.     dubbo_consumer  
  6.     0.0.1-SNAPSHOT  
  7.   
  8.       
  9.         3.2.8.RELEASE  
  10.       
  11.   
  12.       
  13.           
  14.           
  15.             com.lin  
  16.             dubbo_provider  
  17.             0.0.1-SNAPSHOT  
  18.           
  19.           
  20.           
  21.             com.alibaba  
  22.             dubbo  
  23.             2.5.3  
  24.               
  25.                   
  26.                     org.springframework  
  27.                     spring  
  28.                   
  29.               
  30.           
  31.           
  32.           
  33.             com.github.sgroschupf  
  34.             zkclient  
  35.             0.1  
  36.           
  37.           
  38.           
  39.             org.springframework  
  40.             spring-core  
  41.             ${spring.version}  
  42.           
  43.           
  44.             org.springframework  
  45.             spring-beans  
  46.             ${spring.version}  
  47.           
  48.           
  49.             org.springframework  
  50.             spring-context  
  51.             ${spring.version}  
  52.           
  53.           
  54.             org.springframework  
  55.             spring-jdbc  
  56.             ${spring.version}  
  57.           
  58.           
  59.             org.springframework  
  60.             spring-web  
  61.             ${spring.version}  
  62.           
  63.           
  64.             org.springframework  
  65.             spring-webmvc  
  66.             ${spring.version}  
  67.           
  68.           
  69.             org.springframework  
  70.             spring-aop  
  71.             ${spring.version}  
  72.           
  73.           
  74.             org.springframework  
  75.             spring-tx  
  76.             ${spring.version}  
  77.           
  78.           
  79.             org.springframework  
  80.             spring-orm  
  81.             ${spring.version}  
  82.           
  83.           
  84.             org.springframework  
  85.             spring-context-support  
  86.             ${spring.version}  
  87.           
  88.           
  89.             org.springframework  
  90.             spring-test  
  91.             ${spring.version}  
  92.           
  93.           
  94.             org.springframework  
  95.             spring-jms  
  96.             ${spring.version}  
  97.           
  98.       
  99.   


和提供者的POM文件基本上是一样的,只不过加了对提供者的依赖。

4、消费者调用提供者

在src/test/java写一个ConsumerServiceTest.java

[java]  view plain copy
  1. package com.lin.service;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. /** 
  8.  * 功能概要: 
  9.  *  
  10.  * @author linbingwen 
  11.  * @since  2015年8月26日  
  12.  */  
  13. public class ConsumerServiceTest {  
  14.   
  15.     /** 
  16.      * @author linbingwen 
  17.      * @since  2015年8月26日  
  18.      * @param args     
  19.      */  
  20.     public static void main(String[] args) {  
  21.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
  22.                 new String[] { “applicationConsumer.xml” });  
  23.           
  24.         context.start();  
  25.         ProviderService providerService = (ProviderService) context.getBean(”providerService”);  
  26.   
  27.         System.out.println(providerService.sayHello(”林炳文Evankaka”));  
  28.         System.out.println(”Press any key to exit.”);    
  29.         try {  
  30.             System.in.read();  
  31.         } catch (IOException e) {         
  32.             e.printStackTrace();  
  33.         }    
  34.   
  35.     }  
  36.   
  37. }  


然后启动:

Dubbo01--Dubbo入门基础及实例讲解_第11张图片

再打开注册中心,发面有消费者在使用提供者,因为都是一个电脑,所以IP都一样。当然。其它电脑也可以访问这个提供者的!

Dubbo01--Dubbo入门基础及实例讲解_第12张图片

你可能感兴趣的:(Dubbo)