文档章节

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

最爱肉肉
 最爱肉肉
发布于 2016/10/07 21:10
字数 1206
阅读 2191
收藏 24
点赞 1
评论 0

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
博文 50
码字总数 34967
作品 0
深圳
程序员
分布式RPC服务框架--rpcx

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

匿名 ⋅ 2017/01/31 ⋅ 7

动手学dubbo之初体验

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

ginobefun ⋅ 2017/07/12 ⋅ 0

Dubbo 低调重启维护,焕发新春的它要走向何处

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

oschina ⋅ 2017/12/13 ⋅ 51

SpringBoot之Dubbo

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

王念博客 ⋅ 2016/03/27 ⋅ 0

使用Dubbo中需要注意的事项

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

加多 ⋅ 01/02 ⋅ 0

m.toutiao.im/whatsmars

whatsmars $ Java生态研究(Spring Boot + Redis + Dubbo + RocketMQ) Spring Boot 系列(Servlet, Tomcat, Spring, SpringMVC, Spring Boot) Modules intro Module Intro whatsmars-common m......

m.toutiao.im ⋅ 2017/12/25 ⋅ 0

GitHub上11月份最热门的Java项目

又到了公布 GitHub 上热门项目的时候啦~在 11 月的排行中,猿妹加入非软件类的项目,这样可以帮助大家更直观的了解哪些项目才是GitHub 上最热门的。现在,一起来看看这些项目你使用过哪些呢?...

架构之路 ⋅ 2017/12/05 ⋅ 0

阿里巴巴分布式服务框架 Dubbo

1.Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里...

老先生二号 ⋅ 2017/07/04 ⋅ 0

Dubbo监控中心的介绍与简易监控中心的安装

监控中心服务接口调用统计报表的显示配置 Dubbo服务提供者和服务消费者中的spring配置文件中增加以下配置: 配置截图如下: 添加完以上配置后,重新构建部署Dub

Fyanghi ⋅ 2016/03/28 ⋅ 2

NutzWk 5.0.3 发布,Java 微服务分布式开发框架

NutzWk 5.0.3 发布了,NutzWk 是基于 Nutz 的开源 Java 企业级开源开发框架。 NutzWk v5.x 是v4.x 的升级版,采用nutzboot、nutz、dubbo、redis、zookeeper、shiro、quartz、beetl等开源技术...

Wizzer ⋅ 04/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

R计算IV

参考文章 #读取文件 rawdata = read.csv("/path/to/csv/file",header=T) colnames(rawdata)[18] <- "y" //重命名因变量y #数据分区 训练集测试集 trainIdx <- sample(nrow(rawdata), round(......

火力全開 ⋅ 14分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

阿里云云栖社区 ⋅ 14分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

猫耳m ⋅ 25分钟前 ⋅ 0

关于ireport自定义变量类型为list的时候

自己摸石头过河,我真的应该去趟市中心图书馆,借本真正靠谱的教材 网上的东西,只有0.01%是有用的,还有0.99%是垃圾,剩下的99%是垃圾的复制品。。 哎!~ 问题是这样的,报表带sql,从db中获...

炑炑milina ⋅ 25分钟前 ⋅ 0

Spring mvc ContextLoaderListener 原理解析

对于熟悉Spring MVC功能,首先应从web.xml 开始,在web.xml 文件中我们需要配置一个监听器 ContextLoaderListener,如下。 <!-- 加载spring上下文信息,最主要的功能是解析applicationContex...

轨迹_ ⋅ 26分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云官方博客 ⋅ 27分钟前 ⋅ 0

Redis安装异常解决办法

官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxvf redis-2.8.17.tar.gz 3. 进入解压缩后的文件夹:c...

slagga ⋅ 32分钟前 ⋅ 0

006. 深入JVM学习—年轻代

1. 年轻代图片 年轻代(Young)属于JVM堆内存空间的一个组成部分 所有使用关键字new新实例化的对象一定会在伊甸园区进行保存,而对于存活区保存的一定是已经在伊甸园区存在一段时间并且经过了...

影狼 ⋅ 33分钟前 ⋅ 0

如何成为一个合格的程序员

偶尔的,我会被人问道:如何成为一名优秀的程序员,更或者,如何成为一名程序员。每次人们问起,我都力图给出不同的答案。因此,我的答案是各种各样的。下面就是我认为的成为一名优秀的程序员...

柳猫 ⋅ 34分钟前 ⋅ 0

cups error_log日志暴增

日志内容 File \"/usr/lib/cups/notifier/dbus\" has insecure permissions 解决(未验证适用范围) sudo service cups stopsudo rm /etc/cups/subscriptions.conf*sudo rm -r /var/cac......

一介码夫_Hum ⋅ 37分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部