日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
關(guān)于Java健壯性的一些思考與實踐

 程序健壯性非常重要,要怎么玩怎么寫才能讓程序更加魯棒呢?我又這么幾點小建議。

一、進行統(tǒng)一的業(yè)務(wù)處理響應(yīng)

根據(jù)螞蟻金服開放平臺的標準返回,一個 response 至少應(yīng)當有4個返回值。

1、isSuccess  調(diào)用是否成功

2、data           返回的響應(yīng)數(shù)據(jù)

3、errorCode  錯誤碼

4、errorMsg    錯誤信息

這就要求我們的接口要有標準的統(tǒng)一的 response ,那怎么實現(xiàn)呢?

1、Spring 切面, JDK 動態(tài)代理,Cglib 動態(tài)代理等用代理類實現(xiàn)

2、匿名子類,使用一個公共的 Executor 來負責處理所有的請求。

上面兩種模式都可以實現(xiàn)標準的 response 的封裝,那么具體要封裝哪些東西呢?其實最主要的就是統(tǒng)一的 try catch,防止出現(xiàn)任何的 500 錯誤給到調(diào)用方。

------ 為什么要在最外層去完成呢?------

因為 500 錯誤對于調(diào)用方來說是致命而且是毫無價值的,無論調(diào)用方是前端還是其他的業(yè)務(wù)系統(tǒng)

------ 設(shè)定統(tǒng)一的錯誤碼 ------

參數(shù)錯誤           PARAMETER_ERROR

數(shù)據(jù)庫錯誤       DATABASE_ERROR

外部系統(tǒng)錯誤   OUTER_SYSTEM_ERROR

如果有了上面的這些錯誤碼以及錯誤信息,業(yè)務(wù)方至少可以告知用戶究竟發(fā)生了什么事,也可以設(shè)定一些列的告警以及自動化運維的方式來處理這些錯誤。

二、參數(shù)檢查

在進行真正的邏輯處理前,應(yīng)當對入?yún)⑦M行一系列的校驗,以保持后續(xù)業(yè)務(wù)處理邏輯的輕量,這也是 fast fail 思想的指導,有錯誤盡早結(jié)束處理。

具體是怎樣的呢?我們假設(shè)參數(shù)為 m.

 
 
 
 
  1. if( null == m ){return ;}

進行空判斷,防止后續(xù)滴啊用m發(fā)生 NullPointerException,但這里也不建議拋出NPE,因為看到日志也會很迷惑。

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

字符串是否為空串

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

集合是否為空或者null

 
 
 
 
  1. try{
  2.     JSON.parseObject( m );
  3.     return true;
  4. }
  5. catch(JSONExceptin e){
  6.     return false;
  7. }

判斷字符串是否為 JSON 格式

三、重試機制

對于特定的外部系統(tǒng)錯誤,可以嘗試多次重試這種策略,當然這也是簡歷在對方的服務(wù)是冪等的前提下。這樣做在某些網(wǎng)絡(luò)不穩(wěn)定的情況下可以提高響應(yīng)成功率。

四、冪等機制

什么叫冪等?意思就是  無論何時何處何人,只要是先攻的請求,就應(yīng)當有相同的響應(yīng),直到到達終態(tài)。

這個原則并不關(guān)注上一次的執(zhí)行結(jié)果,企鵝本次結(jié)果不應(yīng)當因為上一次請求的部分成功或者失敗而導致某些中間狀態(tài)不一致導致請求失敗。

五、Lambda

 
 
 
 
  1. Optionl.of( target )
  2.             .getOrElse( new ArrayList() )
  3.             .filter( Object::NotNull)
  4.             .forEach( () -> {} )

這種寫法可以確保絕大部分的異常不出現(xiàn),特別是在對于集合進行處理的時候,因為集合中只要有其中一個值是會導致程序失敗的,整個程序都會報錯。這樣寫因為對數(shù)據(jù)做了比較多的檢查和兼容,所以出現(xiàn)錯誤的概率會比較低,但也會有一個弊端,就是當這樣的程序都出現(xiàn)異常的時候,開發(fā)者一般不知從何查起,要定位出是哪行數(shù)據(jù)就已經(jīng)很費勁了。

【本文為專欄作者“大蕉”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號“一名叫大蕉的程序員”獲取授權(quán)】


新聞標題:關(guān)于Java健壯性的一些思考與實踐
地址分享:http://www.5511xx.com/article/coiocpc.html