在dubbo的基础上实现异步调用的时候,因为需要支持回调的“重试间隔时间”与“重试次数”等属性。因此,需要扩展dubbo.xsd,需要添加新的属性来支持这种扩展。
dubbo 的xsd是基于spring的schema扩展实现的,一般来说,基于spring的schema扩展要实现一个自定义的配置需要以下步骤:
1.设计配置属性和JavaBean
2.编写XSD文件
3.编写NamespaceHandler和BeanDefinitionParser完成解析工作
4.编写spring.handlers和spring.schemas串联所有部件
5.在spring的配置文件中应用。
先来看看dubbo的JavaBean的结构:
RPC的核心理念是方法,正如其定义一般:远程方法调用。那么这里面的一个核心思想就是方法。从上图的类结构关系可以看出,方法是在接口之上(多个方法组成接口),接口在服务消费者与服务提供者之上(服务消费者与服务提供者之间通过接口来进行远程方法调用)。
不扯这么多,回到正题,从上图可以看出来,在dubbo的JavaBean结构中,大体上可以分为7类。
1.服务相关,包括:方法、服务提供者、服务消费者;
2.注解相关,其实就是以注解的形式来实现xml的部分功能;
3.应用相关,在部署的时候,可以指定应用的一些基本属性;
4.模块相关,这是一个应用层面的模块化,仅仅是逻辑层面的;
5.监控相关,提供了一个简易的监控web端,可以看到一些基础数据;
6.协议相关,支持多协议的发布服务,同时提供一系列的优化参数;
7.注册中心相关,基于SOA的概念,服务提供者将自身注册到一个注册中心,服务消费者去该注册中心查询自己需要的服务。服务的维护交由注册中心维护(最重要的是,dubbo并不过度依靠注册中心,因为在服务消费者本地有一份服务提供者列表缓存,因此,即使注册中心宕机一会,服务消费者还是可以正常和服务提供者通讯),目前基于zk实现。
我们的目的是想在现有的callback实现中添加新的属性。但是callback是在argument中定义的。因此,
第一步:找到xsd中对应的argumentType定义,在其中添加上需要的字段;
第二步:在argument对应的JavaBean文件ArgumentConfig中,添加相应的字段,并且提供get/set方法。到这一步,基本的扩展就结束了,简单的debug以下就可以看到,添加的属性已经加入服务注册时的url中了。
dubbo-RPC学习(一)自定义配置的更多相关文章
-
Dubbo -- 系统学习 笔记 -- 配置
Dubbo -- 系统学习 笔记 -- 目录 配置 Xml配置 属性配置 注解配置 API配置 配置 Xml配置 配置项说明 :详细配置项,请参见:配置参考手册 API使用说明 : 如果不想使用Spr ...
-
Dubbo -- 系统学习 笔记 -- 配置参考手册
Dubbo -- 系统学习 笔记 -- 目录 配置参考手册 <dubbo:service/> <dubbo:reference/> <dubbo:protocol/> ...
-
dubbo 提示No such extension Filter for filter/com.alibaba.dubbo.rpc.Filter
配置时 <dubbo:provider filter="DubboExceptionFilter"></dubbo:provider> DubboExcep ...
-
ASP.NET MVC 学习笔记-7.自定义配置信息(后续)
自定义配置信息的高级应用 通过上篇博文对简单的自定义配置信息的学习,使得更加灵活的控制系统配置信息.实际项目中,这种配置的灵活度往往无法满足项目的灵活度和扩展性. 比如,一个配置信息有三部分组成,而每 ...
-
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
-
ASP.NET MVC 学习笔记-7.自定义配置信息
ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, <appSettings> <add key="LogInf ...
-
dubbo入门学习(四)-----dubbo配置
配置来源 首先,从Dubbo支持的配置来源说起,默认有四种配置来源: JVM System Properties,-D参数 Externalized Configuration,外部化配置 Servi ...
-
SpringBoot基础学习(三) 自定义配置、随机数设置及参数间引用
自定义配置 SpringBoot免除了项目中大部分手动配置,可以说,几乎所有的配置都可以写在全局配置文件application.peroperties中,SpringBoot会自动加载全局配置文件从而 ...
-
基于Spring的可扩展Schema进行开发自定义配置标签支持
一.背景 最近和朋友一起想开发一个类似alibaba dubbo的功能的工具,其中就用到了基于Spring的可扩展Schema进行开发自定义配置标签支持,通过上网查资料自己写了一个demo.今天在这里 ...
-
Netty自娱自乐之类Dubbo RPC 框架设计构想 【上篇】
之前在前一篇的<Netty自娱自乐之协议栈设计>,菜鸟我已经自娱自乐了设计协议栈,gitHub地址为https://github.com/vOoT/ncustomer-protocal.先 ...
随机推荐
-
JSP基础学习
JQuery教程: http://www.w3school.com.cn/jquery/ HTTP协议的 http://www.w3.org/Protocols/rfc2616/rfc2616.htm ...
-
mysql中的where和having子句的区别
mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句 ...
-
java 线程协作 join()
在实际开发中我们往往会遇到这样的情况一个线程的执行需要依赖另一个线程执行后的结果.即主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他 ...
-
存储占用:Memory Map 汉化去广告版
转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/storage-occupancy-memory-map-localization-to-billboards ...
-
CevaEclipse - 常用设置
1. 往工程里面添加在硬盘上已有的文件 File -> Import.. -> General -> File System From directory Browse... 勾选需 ...
-
Matlab - 矩阵元素引用
>> A = [ ; ; ] A = 1. 选择第m行n列的元素 >> A(,) ans = 2. 选择第i列所有元素 >> A(:,) ans = 3. 选择第j ...
-
Nginx学习之如何搭建文件防盗链服务
前言 大家都知道现在很多站点下载资料都是要收费的,无论是积分还是金币,想免费只能说很少很少了,那么这些网站是如何做到资源防盗链的呢? 这里推荐一款比较容易上手的神器,Nginx本身提供了secure_ ...
-
MVC 实用架构设计(三)——EF-Code First(5):二级缓存
一.前言 今天我们来谈谈EF的缓存问题. 缓存对于一个系统来说至关重要,但是是EF到版本6了仍然没有见到有支持查询结果缓存机制的迹象.EF4开始会把查询语句编译成存储过程缓存在Sql Server中, ...
- OpenCV——直方图计算、寻早最值位置和对比匹配(判断两幅图的相似程度)
-
ElasticSearch 2 (20) - 语言处理系列之如何开始
ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...