Dubbo 的应用

Posted 亢东升

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,接着直接调用该接口的所有方法。
 

以上是关于Dubbo 的应用的主要内容,如果未能解决你的问题,请参考以下文章

DUBBO原理应用与面经总结

jQuery应用 代码片段

响应式编程的实践

Dubbo 入门之二 ——- 项目结构解析

看 Netty 在 Dubbo 中如何应用

Dubbo的RPC远程过程调用+Dubbo的负载均衡+Zookeeper注册中心