我们使用Dubbo时,一般都会使用xml配置基本信息,如项目名称(application)、注册中心(register)、协议(protocal)、服务(service),如下所示:

1
2
3
4
5
6
7
<dubbo:application name="demo-provider" owner="programmer" organization="dubbox"/>
 
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
<dubbo:protocol name="dubbo" serialization="kryo" optimizer="com.alibaba.dubbo.demo.SerializationOptimizerImpl"/>
 
<dubbo:service interface="com.alibaba.dubbo.demo.bid.BidService" ref="bidService" protocol="dubbo"/>

可是大家这些xml节点都是从哪里来的,为什么dubbo启动时可以识别,为什么输入有提示,下面首先为大家介绍一下xml节点从哪里来,为什么可以自动提示?下一篇再介绍怎样处理xml内容。

一、从哪里来?

首先看xml的beans根目录的URL:http://code.alibabatech.com/schema/dubbo

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="

为什么引入这个dubbo的url,在xml文件中就可以自动提示相应的节点信息,我们首先看dubbo源码中的和两个文件:

1、repository\com\alibaba\dubbo\2.5.3\dubbo-2.5.3\META-INF\spring.handlers

图中的代码说明了url对应的处理类

2、repository\com\alibaba\dubbo\2.5.3\dubbo-2.5.3\META-INF\spring.schemas

图中的代码说明了url对应的xsd文件

二、Dubbo.xsd的组成

第一步中解释了xml元素的来源,下一步通过分析dubbo.xsd文件解释xml元素、属性及自动提示。

dubbo.xsd主要包含以下4个类型的元素:

1、xsd:import:引入其它标签库,dubbo.xsd中还需要其它的xsd,处理方式和dubbo.xsd相同

1
2
3
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>

2、xsd:annotation:xsd文件描述

1
2
3
<xsd:annotation>
        <xsd:documentation><![CDATA[ Namespace support for the dubbo services provided by dubbo framework. ]]></xsd:documentation>
    </xsd:annotation>

3、xsd:complexType name="abstractMethodType:abstract开头的complextType:作为其它complexType类型的基类,提取共同的属性配置

这个抽象complexType只列出了前面两个参数:timeout、retries

1
2
3
4
5
6
7
8
9
10
11
<xsd:complexType name="abstractMethodType">
        <xsd:attribute name="timeout" type="xsd:string" use="optional" default="0">
            <xsd:annotation>
                <xsd:documentation><![CDATA[ The method invoke timeout. ]]></xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="retries" type="xsd:string" use="optional">
            <xsd:annotation>
                <xsd:documentation><![CDATA[ The method retry times. ]]></xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>

4、xsd:element name="service" type="serviceType:某个节点的配置,这里以service节点为例,type属性指向了具体的类型
type属性值说明具体的元素时serviceType

1
2
3
4
5
<xsd:element name="service" type="serviceType">
        <xsd:annotation>
            <xsd:documentation><![CDATA[ Export service config ]]></xsd:documentation>
        </xsd:annotation>
    </xsd:element>

5、xsd:complexType name="serviceType":某个节点的具体属性,第4步中type属性指向的节点,其中base属性指向集成的complexType

具体的complexType(部分),包括子元素method、parameter,基类元素abstractServiceType

1
2
3
4
5
6
7
8
<xsd:complexType name="serviceType"
        <xsd:complexContent>
            <xsd:extension base="abstractServiceType">
                <xsd:choice minOccurs="0" maxOccurs="unbounded">
                    <xsd:element ref="method" minOccurs="0" maxOccurs="unbounded" />
                    <xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
                    <xsd:element ref="beans:property" minOccurs="0" maxOccurs="unbounded" />
                </xsd:choice>

三、dubbo.xml配置文件和dubbo.xsd的关系
1、示例一:protocol

1
2
<dubbo:protocolname="dubbo"port="-1"dispatcher="all"threadpool="fixed"threads="100"/>

对应的dubbo.xsd节点

2、示例二

1
2
3
<dubbo:service interface="org.gossip.dub.facade.ISeckillService" ref="seckillService" retries="0">
    <dubbo:method name="a1"></dubbo:method>
</dubbo:service>

Dubbo.xml配置源-Dubbo.xsd分析的更多相关文章

  1. 【Dubbo源码阅读系列】之 Dubbo XML 配置加载

    今天我们来谈谈 Dubbo XML 配置相关内容.关于这部分内容我打算分为以下几个部分进行介绍: Dubbo XML Spring 自定义 XML 标签解析 Dubbo 自定义 XML 标签解析 Du ...

  2. spring 5.x 系列第15篇 —— 整合dubbo (xml配置方式)

    文章目录 一. 项目结构说明 二.项目依赖 三.公共模块(dubbo-common) 四. 服务提供者(dubbo-provider) 4.1 productService是服务的提供者( 商品数据用 ...

  3. Dubbo xml配置 和注解配置 写法

    <?xml version="1.0" encoding="UTF-8"?><!-- - Copyright 1999-2011 Alibab ...

  4. dubbo高级配置学习

    启动时检查 可以通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动. 关闭某个服务的启动时检查:(没有提供者时报错) < ...

  5. dubbo高级配置学习(上)

    启动时检查 Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true. 如果你的Spring容器是懒加载的, ...

  6. dubbo源码分析7——dubbo的配置解析_与spring的整合

    dubbo的配置其实就是建立在spring的命名空间的配置机制之上的.在dubbo的jar包的META-INF目录下会有spring.handlers这个文件,用来配置spring的命名空间和解析类的 ...

  7. 【原】Spring和Dubbo基于XML配置整合过程

    背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只需一个 ...

  8. Dubbo SPI 机制源码分析(基于2.7.7)

    Dubbo SPI 机制涉及到 @SPI.@Adaptive.@Activate 三个注解,ExtensionLoader 作为 Dubbo SPI 机制的核心负责加载和管理扩展点及其实现.本文以 E ...

  9. 阿里巴巴Dubbo实现的源码分析

    1.      Dubbo概述 Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案.它的核心功能包括: #remoting ...

随机推荐

  1. vue组件,撸第一个

    实现此例您可以学到: vue-cli的基本应用 父组件如何向子组件传递值 单文件组件如何引入scss v-on和v-for的基础应用 源码下载 一.搭建vue开发环境 更换镜像到cnpmnpm ins ...

  2. iOS之上架打包时报错:ERROR ITMS-90086: "Missing 64-bit support.

    根据错误信息在网上基本找到的解决方法是设置targets中build settings中的architectures中的内容 这是因为现在提交的app必须支持64位.  

  3. Docker 搭建 etcd 集群及管理

    环境 host1 10.1.99.13 host2 10.1.99.14 host3 10.1.99.15 host4 10.1.99.12(用于测试添加删除节点) 初始化集群 host1 $ doc ...

  4. ubuntu 下 编译ffmpeg 3.1.1

    1,下载ggmpeg源码:http://ffmpeg.org/download.html 2.下载ndk ,百度 3.配置环境 3.1 编译FFMPEG时,出现了 ffmpeg yasm not fo ...

  5. shell-正则表达式

    证则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.许多程序设计 ...

  6. 今天学习的裸板驱动之GPIO实验学习心得

    GPIO分成很多组今天学习的这个芯片的GPIO有GPA-GPJ个组.具体可在芯片手册中看到. GPIO有很多寄存器,今天学习的这个芯片,他的寄存器分为以下几种类型: (1)端口控制寄存器 (2)端口数 ...

  7. Python tools used for file name devision

    今天因为工作的缘故,需要用Python写一个能够完全分解文件名的小程序. import os #path = os.path.abspath('.') def split_fully(name): p ...

  8. 【IE6的疯狂之六】li在IE中底部3像素的BUG(增加浮动解决问题)

    今天开发项目中碰到一个li在IE中的BUG,先来看设计原型(如图:) 两个红色中间是<li>1px的底边框: 我写的代码如下: ============================== ...

  9. OSI七层模型详解

    OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...

  10. LCT

    一个LCT看了一天了,但是很多地方还是理解的很模糊,简单谈一下理解. LCT支持的是对于森林的分裂.合并,以及查询节点的连通性等操作. 对于这片森林来说,它是由一坨树组成的,对于每一棵树,我们采用类似 ...