文档章节

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

最爱肉肉
 最爱肉肉
发布于 2016/10/07 21:10
字数 1206
阅读 2252
收藏 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
博文 51
码字总数 34967
作品 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
6.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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

C++ gflags

gflags是google一个开源的处理命令行参数的库,相比getopt,更加容易使用。 定义参数 gflags主要支持的参数类型包括 DEFINEbool: boolean DEFINEint32: 32-bit integer DEFINEint64: 64-bit ...

SibylY
30分钟前
0
0
intellij IDEA Properties中文unicode转码问题

在IDEA中创建了properties文件,发现默认中文不会自动进行unicode转码。如下 在project settings - File Encoding,在标红的选项上打上勾,确定即可 效果图如下: unicode转码后效果...

muzi1994
31分钟前
0
0
Java IO类库之PipedWriter

一、PipedWriter介绍 PipedWriter是字符管道输出流,继承自Writer,功能与PipedOutputStream类似,通过与PipedReader组合使用实现类似管道的功能,在多线程环境下,一个线程使用PipedWriter...

老韭菜
35分钟前
0
0
精简分页组件(手写)

需要引入CSS(没错就是这4行) .pagelist { text-align: center; color: #666; width: 100%; clear: both; margin: 20px 0; padding-top: 20px }.pagelist a { color: #666; margin: 0 2px;......

AK灬
36分钟前
3
0
29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?

泡泡是我的好朋友。今年 31 岁,毕业后就进了阿里巴巴,工作五年内从 P4 晋升至 P6、P7、P8。 和他很少聊到工作,但总觉得他有很棒的职场心得,应该分享出来,于是有了这次采访。希望对职场新...

Java填坑之路
38分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部