Dubbo 的应用

---  用于大规模服务化,通过在消费方获取服务提供方的地址列表,实现负载均衡,减轻服务器压力。

最简单调用图

节点角色说明:

l  Provider: 暴露服务的服务提供方。

l  Consumer: 调用远程服务的服务消费方。

l  Registry: 服务注册与发现的注册中心。

l  Monitor: 统计服务的调用次调和调用时间的监控中心。

l  Container: 服务运行容器。

调用关系说明:

l  0. 服务容器负责启动,加载,运行服务提供者。

l  1. 服务提供者在启动时,向注册中心注册自己提供的服务。

l  2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

l  3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

l  4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

l  5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

简单用法

需与spring集成(也可以调用api,但官方不推荐,且代码臃肿)。

Java代码跟正常功能一样,只需要一个接口和一个实现类,像正常spring一样配置。

需要详细说明的是xml配置:

提供者(服务端):

 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"
 4     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans
 6             http://www.springframework.org/schema/beans/spring-beans.xsd
 7             http://code.alibabatech.com/schema/dubbo
 8             http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 9
10     <!-- 提供方应用信息,用于计算依赖关系 -->
11     <dubbo:application name="ushop-service-mall" />
12
13     <!-- 使用zookeeper注册中心暴露服务地址 -->
14     <dubbo:registry protocol="zookeeper" address="XXXX(zookeeper服务IP)" />
15
16     <!-- 监控中心配置,protocol="registry",表示从注册中心发现监控中心地址 -->
17     <dubbo:monitor protocol="registry"/>
18
19     <!-- 当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值 -->
20     <dubbo:provider timeout="60000" threadpool="fixed"/>
21     <dubbo:protocol threads="200" name="dubbo" port="20880"/>
22             <!-- 需要提供的服务 -->
23     <dubbo:service executes="200" retries="0"  interface="com.XXX.facade.XXXFacade" ref="xXXFacade" />

24
25
26   </beans>

消费者(调用客户端):

<?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://code.alibabatech.com/schema/dubbo
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="ProjectName" />

    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <!-- 多注册中心配置,竖号分隔表示同时连接多个不同注册中心,同一注册中心的多个集群地址用逗号分隔 -->
    <!-- 注册中心地址 -->
    <dubbo:registry protocol="zookeeper" address="XXXX(zookeeper服务IP)" />

    <!-- 监控中心配置,protocol="registry",表示从注册中心发现监控中心地址 -->
    <dubbo:monitor protocol="registry"/>
<!-- 需要调用的服务 -->

<dubbo:reference interface="com.XXX.facade.XXXFacade" id="xXXFacade" check="false" />

</beans>

代码简单解释(配置项暂不说明):

l  在服务端只需用

<dubbo:service executes="200" retries="0"  interface="com.XXX.facade.XXXFacade" ref="xXXFacade" />

这段配置来暴露服务的接口,ref的值是spring配置的bean。

l  在客户端

<dubbo:reference interface="com.XXX.facade.XXXFacade" id="xXXFacade" check="false" />,来声明一个spring的bean,然后可以在需要的地方获取这个bean,接着直接调用该接口的所有方法。 
时间: 2024-10-14 17:49:25

Dubbo 的应用的相关文章

Dubbo

Dubbo Duboo是什么 DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点.可以看出在阿里内部广泛应用,类似的还有Spring Cloud. 准备工作 准备两虚机,我这里用了CentOS7.2,加上本机可组成多提供者和消费者(当然一个虚机和不用虚机也可以)我准备的两台IP为:192.168.124.129(用于

阿里巴巴Dubbo实现的源码分析[转]

阿里巴巴Dubbo实现的源码分 1.      Dubbo概述 Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案.它的核心功能包括: #remoting:远程通讯基础,提供对多种NIO框架抽象封装,包括"同步转异步"和"请求-响应"模式的信息交换方式. #Cluster: 服务框架核心,提供基于接口方法的远程过程调用,包括多协议支持,并提供软负载均衡和容错机制的集群支持. #regist

dubbo框架----探索-大型系统架构设计(图解)

对于高并发系统的架构要求: 1. 负载均衡 2.高并发 3.高可用 4.面向服务架构 (Dubbo框架使用) 5.分布式缓存 (redis分布式缓存) 6.分布式全文检索 (solr分分布式全文检索) 7.分布式数据库集群 (mycat 集群mysql数据库) dubbo  简介 系统架构 redis 集群 solr 集群 mysql 集群

21.dubbo脚本之dump.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties |

22.dubbo脚本之start.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` SERVER_PROTOCOL=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.pro

23.dubbo脚本之stop.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` if [ -z "$SERVER_NAME" ]; then     SERVER_NAME=`hostname` fi PID

关于dubbo的服务降级

一.dubbo降级服务     dubbo开发中,可能由于服务没有启动或者网络不通,调用中会出现RpcException,也就是远程调用失败.如果是服务启动顺序的问题,可能加工check="false"的配置可以得到很好的解决.但是,如果是服务宕掉或者并发数太高导致的RpcException该如何处理? 经过过12306抢票的人应该经常会遇到这个问题:在抢票高峰的时候,明明票还有,但是查询出来的列表却是为空的(如果没票列表也应该会呈现):等高峰过后再查询,列表又恢复正常.个人猜测应该是

基于ZooKeeper的Dubbo注册中心的简单例子

一:安装zookeeper 系统环境 Ubuntu 14.04.2 LTS x64 IP : 192.168.1.102 下载zookeeper-3.4.6.tar.gz到目录/opt,解压 mkdir /opt/zookeeper-3.4.6/data vim /opt/zookeeper-3.4.6/conf/zoo.cfg 输入如下内容 tickTime=2000 dataDir=/opt/zookeeper-3.4.6/data clientPort=2181 然后,启动 sh /opt

dubbo之令牌验证

防止消费者绕过注册中心访问提供者 在注册中心控制权限,以决定要不要下发令牌给消费者 注册中心可灵活改变授权方式,而不需修改或升级提供者 可以全局设置开启令牌验证 <!--随机token令牌,使用UUID生成--> <dubbo:provider token="true" /> <!--固定token令牌,相当于密码--> <dubbo:provider token="123456" /> 也可在服务级别设置: <

dubbo之服务容器

服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源. 服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务. 服务容器的加载内容可以扩展,内置了spring, jetty, log4j等加载,可通过Container扩展点进行扩展,参见:Container.配置配在java命令-D参数或者dubbo.properties中 Spring Contai