高可用作為考究系統的一項重要指標,如何做到系統的高可用,談及乙個系統,這個話題就難以越過。quartz作為目前排程框架的乙個流行元件,如何保證quartz的高可用,任務排程失敗後,如何進行重試,這個也是乙個值得關注的問題。
網上看過許多涉及定時排程的開源專案,但發現其都存在乙個問題,並未對任務排程的失敗做處理,僅僅只是簡單的日誌記錄,以及手工重採。但是現實情況中,往往可能因為間歇性原因導致排程的失敗,可能重新排程一下就可以成功,那麼這時失敗重試就尤為重要。
找過網上關於quartz失敗後如何實現重試。倒是找到過集中方式。
引入第三方jar包,spring-retry。可以通過註解的方式或者整合對應的類,重寫對應的方法。個人觀點。又引入第三方jar,感覺不太理性。同時感覺過於複雜,有的業務需求不太好控制。
在quartz裡面拋異常時,自己用執行緒類睡多長時間後,進行再次呼叫。這種存在很大缺點。執行緒一直阻塞,不太優雅。當然可以用執行緒池的方式來進行實現,這種我沒嘗試過。
quartz拋異常時,獲取失敗的job,設定啟動時間,策略執行一次,這種方式,個人覺得最好,夠優雅
下面簡單介紹一下這種方式,直接貼原始碼:
public abstract class abstractquartzjob implements job
if (sysjob != null)
afterreturning(context, sysjob);
} catch (exception e)
}/**
* @description
* 在丟擲異常後
* @date 2019/6/28 15:57
* @author wangzx
* @version v1.0.20
**/protected void afterthrowing(jobexecutioncontext context, exception e, parammapsysjob) catch (schedulerexception e1)
parammap.put("mottaskstatus", "1");
parammap.put("mottaskid", sysjob.get("mottaskid"));
springutils.getbean(f051_f100_imottaskdao.class).f2106054(parammap);
} else
}/**
* @description
* 返回後
* @date 2019/6/28 16:01
* @author wangzx
* @version v1.0.20
**/protected void afterreturning(jobexecutioncontext context, parammapsysjob)
/*** 執行前
** @param context 工作執行上下文物件
* @param sysjob 系統計畫任務
*/protected void before(jobexecutioncontext context, parammapsysjob)
/*** 執行後
** @param context 工作執行上下文物件
*/protected void after(jobexecutioncontext context, exception e, parammapsysjob)
/*** 執行方法,由子類過載
** @param context 工作執行上下文物件
* @param sysjob 系統計畫任務
* @throws exception 執行過程中的異常
*/protected abstract void doexecute(jobexecutioncontext context, parammapsysjob) throws exception;
}
Dubbo的超時重試機制
我們在使用dubbo的過程中一定對於下面的配置十分熟悉 下面來解釋一下各引數的含義 1.timeout 3000 服務呼叫的超時時間,呼叫服務的過程中如果達到3秒就會報超時異常,超時異常後客戶端會進行嘗試設定的 retries 次呼叫。有乙個需要注意的地方,timeout只有在超時異常才有效,如果是...
高可用之 超時與重試機制
最重要的超時設定是網路連線 讀 寫的超時時間設定。其中最重要的超時設定是網路相關的超時設定。對於客戶端超時主要設定有讀取請求頭超時時間 讀取請求體超時時間 傳送響應超時時間 長連線超時時間。此引數要配合keepalive disable和keeplive requests一起使用。keepalive...
中斷重試機制
原文 中斷重試 中斷重試機制 public abstract class retrytemplate public retrytemplate setsleeptime int sleeptime this sleeptime sleeptime return this public intgetr...