今天開始研讀nacos 代碼,學習一下。
讀到 com.alibaba.nacos.client.config.http.HttpAgent 時發現一個特點,該接口有兩個實現類。
MetricsHttpAgent:
度量類,實現了父類的方法,重新調用當前方法。在掉用當前方法前做一些異常處理及參數獲取
@Override
public HttpResult httpGet(String path, List<String> headers, List<String> paramValues, String encoding, long readTimeoutMs) throws IOException {
Histogram.Timer timer = MetricsMonitor.getConfigRequestMonitor("GET", path, "NA");
HttpResult result = null;
try {
result = httpAgent.httpGet(path, headers, paramValues, encoding, readTimeoutMs);
} catch (IOException e) {
throw e;
} finally {
timer.observeDuration();
timer.close();
}
return result;
}
ServerHttpAgent:
實際的業務邏輯的實現類,類中同樣出現異常時同樣會進行捕獲,但對於出現業務邏輯不符合預期時會直接拋出異常
我的的感受:
最近在寫公司代碼的時候有點難受,針對於微服務的方法調用的時候,會對返回的實體進行封裝,組成規範的返回對象實體。
但是服務調用本身從封裝實體再去獲取實際想要的實體,中間多了一層邏輯,我個人覺得很變扭。
跟同事溝通後,贊同當前做法,對查詢出的實體進行封裝成對邊的標準實體 即 有返回code,result,success 一些列值的實體
針對於服務調用,對方更喜歡你返回結果帶有編碼,我只需要根據你返回的編碼進行判斷即可。
同樣在 服務調用的API實現類中 我們需要進行異常捕獲 保證返回給業務方式一個實體對象,不是一對亂七八糟的異常編碼。
這裏就涉及到了業務異常的拋出,我相信很多人都跟我一樣喜歡直接拋出業務異常,而不是封裝一個對象。然後在最外層直接進行異常的捕獲,代碼簡潔明瞭,很舒適。
針對於當前nacos的編碼規範:
總結,服務的調用的實現方法必須異常捕獲,保證使用者的用戶體驗,針對不同的業務異常進行捕獲返回對象。