text服务化最佳实践(代码片段)

author author     2022-11-30     427

关键词:

分包
建议将服务接口、服务模型、服务异常等均放在 API 包中,因为服务模型和异常也是 API 的一部分,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。

如果需要,也可以考虑在 API 包中放置一份 Spring 的引用配置,这样使用方只需在 Spring 加载过程中引用此配置即可。配置建议放在模块的包目录下,以免冲突,如:com/alibaba/china/xxx/dubbo-reference.xml。

粒度
服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo 暂未提供分布式事务支持。

服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。

不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。

版本
每个接口都应定义版本号,为后续不兼容升级提供可能,如: <dubbo:service interface="com.xxx.XxxService" version="1.0" />。

建议使用两位版本号,因为第三位版本号通常表示兼容升级,只有不兼容时才需要变更服务版本。

当不兼容时,先升级一半提供者为新版本,再将消费者全部升为新版本,然后将剩下的一半提供者升为新版本。

兼容性
服务接口增加方法,或服务模型增加字段,可向后兼容,删除方法或删除字段,将不兼容,枚举类型新增字段也不兼容,需通过变更版本号升级。

各协议的兼容性不同,参见:服务协议

枚举值
如果是完备集,可以用 Enum,比如:ENABLE, DISABLE。

如果是业务种类,以后明显会有类型增加,不建议用 Enum,可以用 String 代替。

如果是在返回值中用了 Enum,并新增了 Enum 值,建议先升级服务消费方,这样服务提供方不会返回新值。

如果是在传入参数中用了 Enum,并新增了 Enum 值,建议先升级服务提供方,这样服务消费方不会传入新值。

序列化
服务参数及返回值建议使用 POJO 对象,即通过 setter, getter 方法表示属性的对象。

服务参数及返回值不建议使用接口,因为数据模型抽象的意义不大,并且序列化需要接口实现类的元信息,并不能起到隐藏实现的意图。

服务参数及返回值都必需是传值调用,而不能是传引用调用,消费方和提供方的参数或返回值引用并不是同一个,只是值相同,Dubbo 不支持引用远程对象。

异常
建议使用异常汇报错误,而不是返回错误码,异常信息能携带更多信息,并且语义更友好。

如果担心性能问题,在必要时,可以通过 override 掉异常类的 fillInStackTrace() 方法为空方法,使其不拷贝栈信息。

查询方法不建议抛出 checked 异常,否则调用方在查询时将过多的 try...catch,并且不能进行有效处理。

服务提供方不应将 DAO 或 SQL 等异常抛给消费方,应在服务实现中对消费方不关心的异常进行包装,否则可能出现消费方无法反序列化相应异常。

调用
不要只是因为是 Dubbo 调用,而把调用 try...catch 起来。try...catch 应该加上合适的回滚边界上。

Provider 端需要对输入参数进行校验。如有性能上的考虑,服务实现者可以考虑在 API 包上加上服务 Stub 类来完成检验。

text最佳rspec实践(代码片段)

查看详情

text詹金斯最佳实践(代码片段)

查看详情

redis最佳实践(代码片段)

...s是当前主流的缓存数据库实现,本文介绍Redis基本概念与最佳实践。架构与概念Redis是一个使用ANSIC编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。从2015年6月开始,Redis的开发由RedisLabs赞助,而2013年 查看详情

服务的最佳实践--完整版的下载示例(代码片段)

这里主要是《Android第一行代码》第二版书中10.6碰到的问题和解决方法,记录下来希望能帮到大家,也希望大家有更好的解决方案能一起交流.。AndroidStudio版本如下:  这里我先列出按照书上代码运行会出现的错误:(1)... 查看详情

dubbo——dubbo中的常用标签服务化最佳实践(代码片段)

文章目录:1.Dubbo中的常用标签2.Dubbo中的服务化最佳实践2.1分包2.2粒度2.3版本 2.4案例分析2.4.1003-link-interface2.4.2004-link-userservice-provider2.4.3005-link-consumer2.4.4启动测试1.Dubbo中的常用标签Dubbo中常用标签。分为三个类别:公用... 查看详情

日志采集最佳实践(代码片段)

...采集、存储与查询,分析各种功能用法与场景,给出一些最佳实践建议。注:本文仅适用于TKE集群。如何快速上手?TKE的日志功能入口在集群运维-日志规则,更多关于如何为TKE集群启用日志采集与基础用法,参考官方文档日志采集... 查看详情

我们必须要知道的restful服务最佳实践(代码片段)

看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非常有必要归纳一下关于RESTful架构方式了,RESTful只是一种架构方式的约束,给出一种约定的标准,完全严格遵守RESTful标准并不是很多,也没有必要。但是在实际... 查看详情

jquery编程的标准写法和最佳实践(jquery代码规范)(代码片段)

jQuery的加载1、我们经常用CDN来加载网页,我之前的文章中也多次提及,点击查看使用CDN的好处,<scripttype="text/javascript"src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script>window.jQuery||docum 查看详情

serilog最佳实践(代码片段)

Serilog最佳实践概述Serilog[1]是Microsoft.NET的结构化日志记录库,并已成为Checkout.com上NET的首选日志记录库。它支持各种日志记录目的地(称为接收器[2])包从标准控制台和基于文件的接收器到日志服务,如Datadog。本... 查看详情

javascript最佳实践(代码片段)

查看详情

markdowndevops最佳实践(代码片段)

查看详情

textlaravel最佳实践(代码片段)

查看详情

csscss最佳实践(代码片段)

查看详情

markdownfirebasefirestore最佳实践(代码片段)

查看详情

textrest最佳实践(代码片段)

查看详情

海盗中间件:美团服务体验平台对接业务数据的最佳实践(代码片段)

背景移动互联网时代,用户体验为王。美团服务体验平台希望能够帮助客户解决在选、购、用美团产品过程中遇到的各种问题,真正做到“以客户为中心”,为客户排忧解难。但服务体验平台内部只维护客户的客诉数据,为了精... 查看详情

基于go/grpc/kubernetes/istio开发微服务的最佳实践尝试(代码片段)

基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试-1/3基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试-2/3基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试-3/3项目地址:https://github.com/janrs-io/Jgrpc转载请注明来源:https://janrs.com/... 查看详情

es最佳实践配置(代码片段)

Elasticsearch性能优化Elasticsearch是当前流行的企业级搜索引擎,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。作为一个开箱即用的产品,在生产环境上线之后,我们其实不一定能确保其的性能和稳定... 查看详情