天天看點

分布式定時任務解決方案-spring boot整合JMS以及Redis實作

最近需要設計一個分布式的定時任務的方案,從理論上來說,Quartz已經提供了一套完善的分布式定時任務的解決方案,但是由于系統目前已有JMS叢集和Redis Sentinel叢集,如果想要在目前已有的架構上,實作了一個簡單的分布式定時任務的話,如何來做了?總體架構設計圖如下:

分布式定時任務解決方案-spring boot整合JMS以及Redis實作

redis叢集:提供分布式的緩存,以及實作簡單的分布式鎖http://blog.csdn.net/liuchuanhong1/article/details/54668460

Node1~Node3節點:定時從資料庫中查詢需要執行的任務,由于查詢的結果是List,如果3個Node節點同時查庫,并将查詢的結果推送到中間件叢集中,那麼待執行的任務肯定是會重複的(分庫的話,另說)。換句話說,同一時間,隻允許一個Node節點活動,沒有擷取到分布式鎖的節點則阻塞,直到擷取到鎖,同時避免出現單節點故障。

JMS叢集:解耦,Node節點會将從資料庫中查詢出的待處理任務打散後(充分利用多個任務Node的特性,比如此時查詢出來的待執行任務有10個,則可以将這10個任務分别推送到不同的Execute Node上執行,避免這10個任務在一個Node上執行)推送到JMS對應的隊列中。

Execute Node節點:監聽JMS的隊列,并從隊列中取出待執行的任務,并異步執行http://blog.csdn.net/liuchuanhong1/article/details/54603546

繼續閱讀