最近需要設(shè)計(jì)一個(gè)分布式的定時(shí)任務(wù)的方案,從理論上來(lái)說(shuō),Quartz已經(jīng)提供了一套完善的分布式定時(shí)任務(wù)的解決方案,但是由于系統(tǒng)目前已有JMS集群和Redis Sentinel集群,如果想要在目前已有的架構(gòu)上,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的分布式定時(shí)任務(wù)的話(huà),如何來(lái)做了?總體架構(gòu)設(shè)計(jì)圖如下:
redis集群:提供分布式的緩存,以及實(shí)現(xiàn)簡(jiǎn)單的分布式鎖http://blog.csdn.net/liuchuanhong1/article/details/54668460 Node1~Node3節(jié)點(diǎn):定時(shí)從數(shù)據(jù)庫(kù)中查詢(xún)需要執(zhí)行的任務(wù),由于查詢(xún)的結(jié)果是List,如果3個(gè)Node節(jié)點(diǎn)同時(shí)查庫(kù),并將查詢(xún)的結(jié)果推送到中間件集群中,那么待執(zhí)行的任務(wù)肯定是會(huì)重復(fù)的(分庫(kù)的話(huà),另說(shuō))。換句話(huà)說(shuō),同一時(shí)間,只允許一個(gè)Node節(jié)點(diǎn)活動(dòng),沒(méi)有獲取到分布式鎖的節(jié)點(diǎn)則阻塞,直到獲取到鎖,同時(shí)避免出現(xiàn)單節(jié)點(diǎn)故障。 JMS集群:解耦,Node節(jié)點(diǎn)會(huì)將從數(shù)據(jù)庫(kù)中查詢(xún)出的待處理任務(wù)推送到JMS對(duì)應(yīng)的隊(duì)列中。 Execute Node節(jié)點(diǎn):監(jiān)聽(tīng)JMS的隊(duì)列,并從隊(duì)列中取出待執(zhí)行的任務(wù),并異步執(zhí)行http://blog.csdn.net/liuchuanhong1/article/details/54603546 |
|
來(lái)自: WindySky > 《定時(shí)任務(wù)》