文档章节

阿里巴巴分布式服务框架Dubbo使用简易教程

最爱肉肉
 最爱肉肉
发布于 2016/10/07 21:10
字数 1206
阅读 2315
收藏 24

Dubbo是什么?

Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

其核心部分包含:

  • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo能做什么?

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

----------------------------------------------------------------------------------------------------------------------------------------------------

****************************************************************************************************************************

----------------------------------------------------------------------------------------------------------------------------------------------------

 以上内容来源Dubbo官网,另外深入学习Dubbo必须访问的站点就是它的官网.我这里只是写一个简单的使用教程,有一个快速入门的基础.

Dubbo官方资源(因为'墙'原因,部分资源无响应.图鉴使用github下载源码):

我这里讲解的dubbo2.4.11版本,其他各版本大体相同,具体差异可能也有.需要去查看相关的document:

生产者配置:

	<description>dubbo配置示例之生产者配置</description>
	
    <!-- 生产者的项目配置 -->
    <dubbo:application id="demoApplication"
                       name="demoApplication"
                       owner="pan"
                       organization="cn"
                       logger="slf4j"
                       compiler="javassist"/> 

    <!--协议,可以配置多个-->
    <dubbo:protocol id="demoServerProtocol"
                    name="dubbo"
                    port="-1"
                    dispatcher="message"
                    threadpool="limited"
                    threads="20">
    </dubbo:protocol>

    <!--注册中心-->
   <dubbo:registry id="demoServerRegistry"
                    protocol="zookeeper"
                    address="zk地址"
                    client="zkclient"
                    group="族的位置"
                    session="60000"
                    register="false"
                    subscribe="false"
                    check="false" file="demo_erver-registry-cache.properties">
    </dubbo:registry> 

    <!--生产者配置-->
    <dubbo:provider id="demoServerProvider"
                    application="demoServerApplication"
                    registry="demoServerRegistry"
                    protocol="demoServerProtocol"
                    cluster="failover"
                    loadbalance="leastactive"
                    serialization="hessian2"
                    retries="0"
                    timeout="15000"
                    proxy="javassist"
                    delay="-1">
    </dubbo:provider>
    
    <!--生产者的接口提供远程调用的bean ref是对应的bean名-->
    <dubbo:service interface="com.pan.demo.service.Service1" ref="demoService1"/>
    <dubbo:service interface="com.pan.demo.service.Service2" ref="demoService2"/>
    <dubbo:service interface="com.pan.demo.service.Service3" ref="demoService3"/>


    

(1)同一IP运行起来几个Provider,listen 端口号从默认端口号向大绑定:将port配置为-1

然后,消费者依赖生产者.

消费者的配置:

<description>dubbo示例之消费者配置</description>

    <!--注册中心-->
    <dubbo:registry id="demoClientRegistry"
                    protocol="zookeeper"
                    client="zkclient"
                    address="zk注册中心地址"
                    group="组地址"
                    subscribe="true"
                    check="false" file="demo_client_dubbo_registry_cache.properties">
    </dubbo:registry>
    
    <!--消费者配置-->
    <dubbo:consumer id="demoServiceConsumer"
                    registry="demoClientRegistry"
                    init="false"
                    check="false"
                    timeout="15000"
                    retries="0">
    </dubbo:consumer>
    
    <!-- 消费者获取远程对象注入本地接口配置的bean -->
    <dubbo:reference id="demoClientService1" interface="com.pan.demo.Service1" consumer="demoServiceConsumer"/>
    <dubbo:reference id="demoClientService2" interface="com.pan.demo.Service2" consumer="demoServiceConsumer"/>
    <dubbo:reference id="demoClientService3" interface="com.pan.demo.Service3" consumer="demoServiceConsumer"/>


 

总结,使用dubbo远程调用的前提:

1.安装配置好zookeeper或者其他服务监听框架.

2.引入jar包.

3.生产者与消费者都需要引入zookeeper,zkclient,dubbojar,spring,log4j包.

4.消费者依赖生产者或者他们共同依赖同一个接口.

4.其他一些异常处理...例如check文件共用了之类的.

好了,现在可以远程调用了.


         @Resource("demoClientService1")//可以不指定名称,前提是bean配好.
         private DemoService1 service ;
         
         
         public static void main(String[] args){
                  
                  sysoout(service.foo("word")) ;
                  
                  }
         
         
         
         
         
                  

OK,使用已经可以了.

具体配置的含义,请参照官方文档.这里写出来太多了.

之后会写一些阅读源码的心得,以及metaq的使用.

 

maven的基本依赖一份:

  <!-- 基本配置 -->
  <properties>
  <spring.version>4.3.3.RELEASE</spring.version>
  <zookeeper.version>3.4.9</zookeeper.version>
  <zkclient.version>0.9</zkclient.version>
  <dubbo.version>2.4.11</dubbo.version>
  <junit.version>4.12</junit.version>
  
  </properties>
  
  <!-- 基本依赖 -->
  <dependencies>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
	<dependency>
		<groupId>org.apache.zookeeper</groupId>
		<artifactId>zookeeper</artifactId>
		<version>${zookeeper.version}</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>2.7</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
	<dependency>
		<groupId>com.101tec</groupId>
		<artifactId>zkclient</artifactId>
		<version>${zkclient.version}</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>dubbo</artifactId>
		<version>${dubbo.version}</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/junit/junit -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>${junit.version}</version>
	</dependency>
  </dependencies>
  

项目依赖根据自己需要调用的接口加入.

© 著作权归作者所有

共有 人打赏支持
最爱肉肉
粉丝 3
博文 52
码字总数 35131
作品 0
深圳
程序员
分布式RPC服务框架--rpcx

rpcx是一个类似阿里巴巴 Dubbo 和微博 Motan 的分布式的RPC服务框架,基于Golang net/rpc实现。 与gRPC比较,完胜gRPC, 更不用说其它的"老"的RPC框架了。 谈起分布式的RPC框架,比较出名的是...

匿名
2017/01/31
6.1K
7
动手学dubbo之初体验

一. 概述 以下部分来源于dubbo用户指南. DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,0...

ginobefun
2017/07/12
0
0
Dubbo 低调重启维护,焕发新春的它要走向何处

几个月前,开源社区发生了一件大事,那个曾经风靡国内 Java 开发者的开源 RPC 服务框架 —— Dubbo,低调宣布将重新得到官方维护与支持。 对于 Dubbo 框架,大部分 Java 开发者都不会感到陌生...

oschina
2017/12/13
0
51
SpringBoot之Dubbo

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

王念博客
2016/03/27
636
0
使用Dubbo中需要注意的事项

一、前言 Dubbo作为高性能RPC框架,已经进入Apache卵化器项目,虽然官方给出了dubbo使用的用户手册,但是大多是一概而过,使用dubbo时候要尽量了解源码,不然会很容易入坑。 二 、服务消费端...

加多
01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
31
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
28
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
37
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
24
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
36
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部