文档章节

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

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

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>
  

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

© 著作权归作者所有

共有 人打赏支持
下一篇: 随便写写
最爱肉肉
粉丝 4
博文 53
码字总数 37271
作品 0
深圳
程序员
私信 提问
动手学dubbo之初体验

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

ginobefun
2017/07/12
0
0
分布式RPC服务框架--rpcx

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

匿名
2017/01/31
6.1K
7
Dubbo 低调重启维护,焕发新春的它要走向何处

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

oschina
2017/12/13
7.1K
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

没有更多内容

加载失败,请刷新页面

加载更多

Js中DOM事件绑定分析

在这篇文章中小编给大家整理了关于JS中DOM事件绑定的相关知识点,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 #Js事件绑定 Ja...

前端攻城小牛
11分钟前
2
0
指令、伪操作、伪指令和宏指令区别

汇编语言程序中的语句可以由指令、伪指令和宏指令组成。 指令:每一条指令都对应一种CPU操作。 伪指令又称为伪操作,它是在对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择...

二营长意大利炮
11分钟前
1
0
SQL Server SQL语句删除索引

当删除索引提示超时时候,可以使用SQL语句删除索引,可以避免删除索引超时问题。 use [数据库名]drop index [索引名称] on [表名]

产吅经理
11分钟前
1
0
深入解析Axios 常用的请求方法别名

下面小编就为大家分享一篇Axios 常用的请求方法别名,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 #Axios 是一个基于 promise ...

前端攻城老湿
18分钟前
1
0
深入解析Vue开发动态刷新Echarts组件的教程

需求背景:dashboard作为目前企业中后台产品的“门面”,如何更加实时、高效、炫酷的对统计数据进行展示,是值得前端开发工程师和UI设计师共同思考的一个问题。今天就从0开始,封装一个动态渲...

peakedness丶
41分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部