亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

服務(wù)器掛了可能引發(fā)的問題

來源:Kelanss 發(fā)布時(shí)間:2018-12-08 15:02:40 閱讀量:1080

今天遇到三個(gè)測試提過來的問題 

1、測試新上傳的圖片獲取不到,返回的圖片名稱也是null  -----圖片服務(wù)器掛了

    原因開發(fā)環(huán)境的圖片服務(wù)器掛了

2、測試新建模板的時(shí)候失敗----服務(wù)器沒有啟動(dòng)相關(guān)服務(wù)

     經(jīng)過排查原因測試環(huán)境的mongo服務(wù)器沒有啟動(dòng)我們項(xiàng)目mongo表對應(yīng)的服務(wù)

    我的處理辦法:先切換到測試環(huán)境進(jìn)行測試確實(shí)存在這個(gè)問題,后來啟動(dòng)我本地進(jìn)行測試,我本地是好的,說明是測試的環(huán)境某個(gè)環(huán)節(jié)出問題了,打測試的包,切換host在本地進(jìn)行測試,程序報(bào)錯(cuò),鏈接不到某臺(tái)服務(wù)器,即測試環(huán)境的服務(wù)器的我們庫所在端口的服務(wù)沒有啟動(dòng)。

3、測試新建活動(dòng)失敗  ---redis 緩存的問題

在解決這個(gè)問題的時(shí)候就比較坑了,因?yàn)閯倓倓傉覝y試啟動(dòng)了斷了連接的mongo表所在的服務(wù)器,

所以排除了是環(huán)境問題,但是經(jīng)過跟蹤調(diào)試確實(shí)是程序里面的某個(gè)該去mongo表里面取值的地方?jīng)]有獲取到值,導(dǎo)致后面出現(xiàn)的異常問題,

這時(shí)控制臺(tái)報(bào)錯(cuò)有異常拋錯(cuò),過了一會(huì)又出現(xiàn)mongo連接不上的異常,再次詢問測試的環(huán)境搭建人員查找原因,得到的原因如下:

“剛剛啟動(dòng)命令少加了后臺(tái)運(yùn)行的參數(shù)?!?/span>

好了解決完了這個(gè)問題應(yīng)該都OK了吧,但是還沒結(jié)束。。。

控制臺(tái)雖然沒有再報(bào)連接不上mongo所在那臺(tái)服務(wù)器的錯(cuò)誤,但是異常信息仍然存在,依然一個(gè)值獲取為空導(dǎo)致的異常:

哈哈下面來看看這個(gè)值獲取的代碼吧:

    public PagePrototype findPagePrototypeCached(Long id) {

        String key = CacheConstants.getPagePrototypeCacheKey(id);

        PagePrototype prototype = redisUtil.getObject(key, PagePrototype.class);


        if(prototype != null){

            return prototype;

        }

        prototype = pagePrototypeDao.queryById(id);

        if (prototype != null) {

            String contentPath = prototype.getContentPath();

            prototype.setContent(fileEntryManager.getFileContent(contentPath,MongoTable.TABLE_PAGE_PROTOTYPE));

            String demoPath = prototype.getDemoPath();

            prototype.setDemo(fileEntryManager.getFileContent(demoPath,MongoTable.TABLE_PAGE_PROTOTYPE));

            redisUtil.setObjectByExpire(key, prototype,CacheConstants.CACHE_ONE_WEEK);

        }

        return prototype;

    }    


這里呢某個(gè)重要值就是Demo啦,跟據(jù)我們的代碼可以看到Demo值是不可能為空的,因?yàn)樵诔跏蓟M(jìn)來的時(shí)候就會(huì)

prototype.setDemo(fileEntryManager.getFileContent(demoPath,MongoTable.TABLE_PAGE_PROTOTYPE));

通過這句去mongo里面取值set進(jìn)去。


好了巧合來了:

剛剛我們的mongo掛了,所以第一次進(jìn)來的時(shí)候當(dāng)然沒走緩存,因?yàn)檫€沒有這個(gè)key值,然后就去我們的mongo表里面查找唄,剛好mongo也掛了,所以就沒有從我們mongo表里面獲取到數(shù)據(jù),fileEntryManager.getFileContent(demoPath,MongoTable.TABLE_PAGE_PROTOTYPE)

程序繼續(xù)向下執(zhí)行就把沒有獲取到數(shù)據(jù)的這個(gè)對象放到了我們的緩存里面,方便下次用。。。。


所以就造成了我們后面修復(fù)了mongo,對象里面的值還是沒有獲取到,

原因是后面程序都是從緩存取值,緩存剛好存的是之前沒有獲取到值的時(shí)候的對象。


像這種原因只有看代碼才找的到的??!


前面確實(shí)是環(huán)境掛了的問題,后面說說我們程序的問題吧,像這種問題我們可以在程序里面處理一下那個(gè)可能為空的值,當(dāng)為空的時(shí)候應(yīng)該把錯(cuò)誤打出來,這樣才方便查找定位問題的所在,不至于浪費(fèi)一下午的時(shí)間排除問題!

--------------------- 


標(biāo)簽: 服務(wù)器搭建
分享:
評論:
你還沒有登錄,請先