新聞中心
有一個(gè)超時(shí)配置,需要從配置文件中讀取,并設(shè)置到連接池里:

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、成都做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出貴德免費(fèi)做網(wǎng)站回饋大家。
- // 從配置文件中讀取超時(shí)配置
- timeout = CGlobalConf::readFileConf(“timeout”);
- // 設(shè)置請(qǐng)求超時(shí)閾值
- CConnectionPool::setTimeout(timeout);
如果超時(shí)配置要修改,每次都要重啟服務(wù),很麻煩,能不能不重啟服務(wù)呢?
方案一:發(fā)信號(hào)觸發(fā)配置重載
這種方法無(wú)需加入任何組件,新增一個(gè)信號(hào)捕捉函數(shù),來處理配置的重新載入。
- // 服務(wù)啟動(dòng)時(shí),設(shè)置ctrl+c回調(diào)函數(shù)
- signal(SIGINT, sigint_shenjian_process);
- // 捕獲ctrl+c時(shí),執(zhí)行配置重新載入動(dòng)作
- void sigint_shenjian_process(int){
- //從配置中讀取超時(shí)配置
- timeout= CGlobalConf::readFileConf(“timeout”);
- //設(shè)置請(qǐng)求超時(shí)閾值
- CConnectionPool::setTimeout(timeout);
- }
當(dāng)需要變更配置時(shí),只需要:
- 修改配置文件;
- 發(fā)送信號(hào),觸發(fā)配置重新載入;
畫外音:啥,不知道如何向服務(wù)發(fā)信號(hào)?
方案二:檢測(cè)配置文件變化,自動(dòng)重新載入
這種方法無(wú)需手動(dòng)發(fā)送信號(hào),修改完配置文件,自動(dòng)檢測(cè),自動(dòng)載入,需要加入文件監(jiān)控組件。
畫外音:這類組件開源的也不少。
文件監(jiān)控組件如何能監(jiān)控文件的變化呢?
別想復(fù)雜了,可以定期檢查文件的md5或者last_modify_time。
- // 服務(wù)啟動(dòng)時(shí),初始化
- CFileMonitor::init(){
- // 獲取初始md5
- old_md5=xxx;
- }
- // 啟動(dòng)一個(gè)進(jìn)程,監(jiān)控文件變化
- CFileMonitor::start(){
- while(1){ // 循環(huán)檢查
- // 獲取最新md5
- now_md5=xxx;
- // 比對(duì)md5是否變化,如果變化
- if(now_md5!=old_md5){
- //從配置中讀取超時(shí)配置
- timeout= CGlobalConf::readFileConf(“timeout”);
- //設(shè)置請(qǐng)求超時(shí)閾值
- CConnectionPool::setTimeout(timeout);
- //修改md5
- old_md5=now_md5;
- }
- // 一秒后再檢查
- sleep(1000);
- }
- }
方案三:注冊(cè)中心,配置變化時(shí)回調(diào)
次方案拋棄了配置文件,需要引入注冊(cè)中心:
- 所有服務(wù)從注冊(cè)中心拿配置;
- 必須從注冊(cè)中心后臺(tái)修改配置;
- 配置修改,注冊(cè)中心回調(diào)引用了相關(guān)配置的服務(wù);
- // 服務(wù)啟動(dòng)時(shí),從注冊(cè)中心獲取配置,并注冊(cè)回調(diào)函數(shù)
- timeout = CConfCenter::(“timeout”, callback_shenjian);
- // 設(shè)置請(qǐng)求超時(shí)閾值
- CConnectionPool::setTimeout(timeout);
- void callback_shenjian(timeout){
- //在注冊(cè)中心修改配置時(shí),會(huì)收到回調(diào)
- CConnectionPool::setTimeout(timeout);
- }
修改配置,不重啟服務(wù),上面三種方式都很常見,不難但實(shí)用。
【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】
網(wǎng)站欄目:改了配置,卻不想重啟,怎么整?
網(wǎng)頁(yè)URL:http://www.5511xx.com/article/djojsgd.html


咨詢
建站咨詢
