Dubbo服务接口的设计原则
1、接口粒度
1.1 服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo暂未提供分布式事务支持。同时可以减少系统间的网络交互。
1.2 服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。
1.3 不建议使用过于抽象的通用接口,接口名称的定义应遵循望文生义原则,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。
2、接口版本
2.1 每个接口都应定义版本号,为后续不兼容升级提供可能,如:<dubbo:service interface="com.XxService" version="1.0" />
3、接口兼容性
3.1 服务接口增加方法,或服务模型增加字段,可向后兼容;
3.2 删除方法或删除字段,将不兼容,枚举类型新增字段也不兼容,需通过变更版本号升级。
4、异常处理
4.1 建议使用异常汇报错误,而不是返回错误码,异常信息能携带更多信息,以及语义更友好。
4.2 如果担心性能问题,在必要时,可以通过override掉异常类的fillInStackTrace()方法为空方法,使其不拷贝栈信息。
4.3 查询方法不建议抛出checked异常,否则调用方在查询时将过多的try...catch,并且不能进行有效处理。
4.4 服务提供方不应将DAO或SQL等异常抛给消费方,应在服务实现中对消费方不关心的异常进行包装,否则可能出现消费方无法反序列化相应异常
5. 设计接口时一定要保证输入参数校验通过,否则会给后续的生产者和消费方带来问题,花费大量的时间去定位
6、在Provider上尽量多配置Consumer端属性
6.1 作为服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等
6.2 在Provider配置后,Consumer不配置则会使用Provider的配置值,即Provider配置可以作为Consumer的缺省值。否则,Consumer会使用Consumer端的全局设置,这对于Provider不可控的,并且往往是不合理的。
6.3 Provider上尽量多配置Consumer端的属性,让Provider实现者一开始就思考Provider服务特点、服务质量的问题
7、服务接口设计与服务子系统划分过程相互优化
Dubbo服务接口的设计原则的更多相关文章
- Dubbo入门到精通学习笔记(十):dubbo服务集群 、Dubbo分布式服务子系统的划分、Dubbo服务接口的设计原则
文章目录 dubbo服务集群 Dubbo服务集群部署 Dubbo服务集群容错配置--集群容错模式 1.Failover Cluster 失败自动切换,当出现失败,重试其它服务器.`(缺省) 通常用于读 ...
- dubbo服务接口开发者必备调试利器,你值得拥有
dubbo服务接口开发者必备调试利器,你值得拥有 学习了:https://my.oschina.net/vboxtop/blog/1524290 找到了:http://www.vbox.top/?fr ...
- 采用jmeter和泛化测试dubbo服务接口
采用jmeter和泛化测试dubbo服务接口 http://blog.csdn.net/linuu/article/details/54313560
- dubbo服务治理框架设计
dubbo.JSF作为使用最广泛的服务端框治理架,其设计和实现思想值得进行学习研究. 整个服务管理框架核心的原理基于反射以及socket调用实现,服务管理框架包含服务的注册管理 服务的索引管理以及服务 ...
- 【C#基础概念】Ineterface 接口的设计原则
接口设计方式 自顶向下 (如图所示),自底向上(发现类需要结构了就声明一个接口). 接口的作用 用来解耦.继承 接口的本质
- 采用jmeter测试dubbo服务接口
http://www.kissyu.org/2017/02/08/jmeter%E6%B5%8B%E8%AF%95dubbo%E6%8E%A5%E5%8F%A3/
- 微观SOA:服务设计原则及其实践方式
大 量互联网公司都在拥抱SOA和服务化,但业界对SOA的很多讨论都比较偏向高大上.本文试图从稍微不同的角度,以相对接地气的方式来讨论SOA, 集中讨论SOA在微观实践层面中的缘起.本质和具体操作方式, ...
- SOA 实现:服务设计原则
http://www.ibm.com/developerworks/cn/webservices/ws-soa-design/ 引言 面向服务的体系结构(Service-Oriented Archit ...
- OOAD之面向对象设计原则
学习这个设计模式 真的觉得很抽象,只有自己多多的领会! 在很多时候,很多的知识都会觉得讲起来是很矛盾的. 本章目标 1 掌握内聚度和耦合度的概念 2 掌握面向对象设计原则 (一)如何衡量软件设计的质 ...
随机推荐
- [js高手之路]深入浅出webpack教程系列7-( babel-loader,css-loader,style-loader)的用法
什么是loader呢,官方解释为文件的预处理器,通俗点说webpack在处理静态资源的时候,需要加载各种loader,比如,html文件,要用html-loader, css文件要用css-loade ...
- Wampserver查看php配置信息
Wampserver安装完成之后输入localhost会有欢迎Wampserver界面. [查看php配置信息]:在页面点击"phpinfo()"进入php配置信息页面. [使用p ...
- JSON 理解
转自: http://blog.csdn.net/qyf_5445/article/details/8635578 (json很全面的理解) http://www.cnblogs.com/haitao ...
- Selenium八种基本定位方式---基于python
from selenium import webdriver driver=webdriver.Firefox() driver.get("https://www.baidu.com&qu ...
- bootstrap 基础(二)
1 栅格系统偏移 栅格系统的偏移只能向右:col-xs-offset-x. <!DOCTYPE html> <html lang="en"> <hea ...
- 【Socket编程】Java中网络相关API的应用
Java中网络相关API的应用 一.InetAddress类 InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址. InetAddress类没有构造方法,所以不能直接new出 ...
- idea插件之——在markdown复制粘贴图片
Markdown paste image 每次在idea的markdown中要粘贴图片的时候,要么复制链接,要么需要将软件手动上传到七牛云,本人根据了holgerbrandl/pasteimages这 ...
- K好数--蓝桥杯
JAVA版K好数--蓝桥杯 历经千辛万苦,也算是研究出来了这道题了. 这道题主要运用了动态规划(Dynamic Planning)的思想,何谓动态规划?其实就是将一个大问题分成一个个小问题,然后先通过 ...
- 201521123024《Java程序设计》第3周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...
- 201521123121 《Java程序设计》第2周学习总结
1. 本周学习总结 通过分析数据所需要占用的内存长度来决定java的类型,其中主要分为基本类型和长类型. 基本类型主要分为五个方面:整数(short=2字节:int=4字节:long=8字节):字节( ...