关于Java健壮性的一些思考与实践 No.102

本文分享了提升程序健壮性的五个关键策略,包括统一业务处理响应、参数检查、重试机制、幂等机制及利用Lambda表达式增强代码安全性。通过实施这些建议,可以显著提高程序的稳定性和可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序健壮性非常重要,要怎么玩怎么写才能让程序更加鲁棒呢?我又这么几点小建议。

一、进行统一的业务处理响应

根据蚂蚁金服开放平台的标准返回,一个 response 至少应当有4个返回值。

1、isSuccess  调用是否成功

2、data           返回的响应数据

3、errorCode  错误码

4、errorMsg    错误信息

这就要求我们的接口要有标准的统一的 response ,那怎么实现呢?

1、Spring 切面, JDK 动态代理,Cglib 动态代理等用代理类实现

2、匿名子类,使用一个公共的 Executor 来负责处理所有的请求。

上面两种模式都可以实现标准的 response 的封装,那么具体要封装哪些东西呢?其实最主要的就是统一的 try catch,防止出现任何的 500 错误给到调用方。

------ 为什么要在最外层去完成呢?------

因为 500 错误对于调用方来说是致命而且是毫无价值的,无论调用方是前端还是其他的业务系统

------ 设定统一的错误码 ------

参数错误           PARAMETER_ERROR

数据库错误       DATABASE_ERROR

外部系统错误   OUTER_SYSTEM_ERROR

如果有了上面的这些错误码以及错误信息,业务方至少可以告知用户究竟发生了什么事,也可以设定一些列的告警以及自动化运维的方式来处理这些错误。

二、参数检查

在进行真正的逻辑处理前,应当对入参进行一系列的校验,以保持后续业务处理逻辑的轻量,这也是 fast fail 思想的指导,有错误尽早结束处理。

具体是怎样的呢?我们假设参数为 m.

if( null == m ){return ;}

进行空判断,防止后续滴啊用m发生 NullPointerException,但这里也不建议抛出NPE,因为看到日志也会很迷惑。

if( StringUtils.isEmpty( m ) ){return ;}

字符串是否为空串

if( CollectionUtils.isEmpty.isEmpty( m ) ){return ;}

集合是否为空或者null

try{

    JSON.parseObject( m );

    return true;

}

catch(JSONExceptin e){

    return false;

}

判断字符串是否为 JSON 格式

三、重试机制

对于特定的外部系统错误,可以尝试多次重试这种策略,当然这也是简历在对方的服务是幂等的前提下。这样做在某些网络不稳定的情况下可以提高响应成功率。

四、幂等机制

什么叫幂等?意思就是  无论何时何处何人,只要是先攻的请求,就应当有相同的响应,直到到达终态。

这个原则并不关注上一次的执行结果,企鹅本次结果不应当因为上一次请求的部分成功或者失败而导致某些中间状态不一致导致请求失败。

五、Lambda

Optionl.of( target )

            .getOrElse( new ArrayList() )

            .filter( Object::NotNull)

            .forEach( () -> {} )

这种写法可以确保绝大部分的异常不出现,特别是在对于集合进行处理的时候,因为集合中只要有其中一个值是会导致程序失败的,整个程序都会报错。这样写因为对数据做了比较多的检查和兼容,所以出现错误的概率会比较低,但也会有一个弊端,就是当这样的程序都出现异常的时候,开发者一般不知从何查起,要定位出是哪行数据就已经很费劲了。

好啦,晚安。

ps:小彩蛋,拷贝  大蕉棒棒吃葡萄吐不鸟葡萄皮儿 到某著名支付App 领取 Red Bag,领到 0.66 私聊我额外给你加一波 buffer。

最近想发布一个 Java 开发校招 的知识准备的项目,专门准备秋招的,大概每天都有任务,三个月后包你成为不一样的自己,有小伙伴想玩吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值