热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

业务代码中如何处理和使用异常

业务代码中如何处理和使用异常背景近期发生多起接口处理异常但是没有报警,不能及时发现和定位。我们展开了对业务代码review和回归,做好异常的处理异常的使用在我们的业务中,业务流程大
业务代码中如何处理和使用异常

背景

近期发生多起接口处理异常但是没有报警,不能及时发现和定位。我们展开了对业务代码review和回归,做好异常的处理

异常的使用

在我们的业务中,业务流程大致可以分为参数校验,业务处理,返回数据。当我们对整个方法异常catch并返回某个结果集时。虽然在业务处理上没有问题,但是如果没有对错误日志配置监控报警,那么对于开发维护人员是没有感知的,造成了问题的扩大化。所以正确的抛出异常才是解决如上问题最经济的方法。

问题来了:怎样抛出异常,什么时候抛出异常?

当我们作为服务提供方时:对于我们业务不能处理,不能掌控的流程那么抛出异常很合理。或者对于某个关键参数的校验,如果失败也应该尽早的抛出异常让服务管理平台感知,而不是返回一个带有描述信息的结果集,因为用户不会主动告诉开发人员这个问题。

异常的处理

《猜不透》有句歌词:

“如果忽远忽近的洒脱

是你要的自由

那我宁愿回到一个人生活

如果忽冷忽热的温柔

是你的借口

那我宁愿对你从没认真过”。

这句歌词大概也描述了每位开发人员对于接口调用的感受。那就是——“猜不透”。你调用的接口或许和你那个初恋情人一样“可爱洒脱”。

但是我们不能“到底这感觉谁对谁错 我已不想追究”任由她。

so,知己知彼百战百胜。每一次调用的结果分为:超时,异常,正常。超时由服务框架处理或者自行处理。对于rpc异常,若本次业务核心就是这个调用,如果发生异常,那么很有必要的抛出异常终止服务并及时处理。如:商品详情查询商品信息接口,若原子层获取商品基础信息异常,那么这个业务也没有必要继续进行,并且需要快速报警,进行处理。

但是一些接口不是核心业务:如列表接口,其中渲染列表会调用scf服务获取一些其他信息,这时异常需要我们捕获记录,继续自己的业务处理,而不是抛出异常终止自己的业务。还有一个null 。当我们调用服务接口返回null。如果它是核心接口不要做业务的兼容让步,这个接口应该抛出异常。例如:搜索分类列表页,如果服务返回null。不要轻易的认为是没有搜索命中而返回的。原则上不要让“她”摆布你,不要去猜测,毕竟爱你的人会给你个“痛快”。对于这种“挑逗”,果断抛出异常吧。

转:https://my.oschina.net/u/3418748/blog/3093832


推荐阅读
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 解决php错误信息不显示在浏览器上的方法
    本文介绍了解决php错误信息不显示在浏览器上的方法。作者发现php中的各种错误信息并不显示在浏览器上,而是需要在日志文件中查看。为了解决这个问题,作者提供了一种解决方式:通过修改php.ini文件中的display_errors参数为On,并重启服务。这样就可以在浏览器上直接显示php错误信息了。 ... [详细]
  • Elasticsearch1Elasticsearch入门1.1Elasticsearch术语1.1.16.0以前的Elasticsearch术语1.1.26.0以后的Elasti ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
author-avatar
孔红MJ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有