0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot集群/分布式下的定時(shí)任務(wù)說(shuō)明

jf_78858299 ? 來(lái)源:SpringBoot ? 作者:林祥纖 ? 2023-04-12 11:31 ? 次閱讀

如有8個(gè)實(shí)例,執(zhí)行的時(shí)候會(huì)隨機(jī)分配一個(gè)實(shí)例運(yùn)行還是8個(gè)都會(huì)運(yùn)行?在這節(jié)博客中沒(méi)有辦法完全解決這個(gè)問(wèn)題,在這里拋磚引玉說(shuō)明下。 看下本章大綱:

(1)回顧定時(shí)任務(wù)的實(shí)現(xiàn)方式;

(2)集群環(huán)境下的任務(wù)調(diào)度說(shuō)明;

(3)Spring的Scheduled Task實(shí)現(xiàn)集群思路;

(4)Quartz實(shí)現(xiàn)集群思路;

我們一起看下本節(jié)具體的內(nèi)容:

(1)回顧定時(shí)任務(wù)的實(shí)現(xiàn)方式;

定時(shí)任務(wù)的實(shí)現(xiàn)方式有多種,例如

JDK自帶的Timer+TimerTask方式,

spring3.0以后的調(diào)度任務(wù)(ScheduledTask),

Quartz等。

(2)集群環(huán)境下的任務(wù)調(diào)度說(shuō)明;

Timer+TimerTask是最基本的解決方案;

Spring自帶的Scheduled Task是一個(gè)輕量級(jí)的定時(shí)任務(wù)調(diào)度器,支持固定時(shí)間(支持cron表達(dá)式)和固定時(shí)間間隔調(diào)度任務(wù),支持線程池管理

以上兩種方式有一個(gè)共同的缺點(diǎn),那就是應(yīng)用服務(wù)器集群下會(huì)出現(xiàn)任務(wù)多次被調(diào)度執(zhí)行的情況,因?yàn)榧旱墓?jié)點(diǎn)之間是不會(huì)共享任務(wù)信息的,每個(gè)節(jié)點(diǎn)上的任務(wù)都會(huì)按時(shí)執(zhí)行。

Quartz是一個(gè)功能完善的任務(wù)調(diào)度框架,特別牛叉的是它支持集群環(huán)境下的任務(wù)調(diào)度,當(dāng)然代價(jià)也很大,需要將任務(wù)調(diào)度狀態(tài)序列化到數(shù)據(jù)庫(kù)。Quartz框架需要10多張表協(xié)同,配置繁多。

(3)Spring的Scheduled Task實(shí)現(xiàn)集群思路;

如果在實(shí)際項(xiàng)目中使用的scheduled task的話,那么也有自己變通的方式進(jìn)行實(shí)現(xiàn)。

無(wú)非是一個(gè)任務(wù)互斥訪問(wèn)的問(wèn)題,聲明一把全局的“鎖”作為互斥量,哪個(gè)應(yīng)用服務(wù)器拿到這把“鎖”,就有執(zhí)行任務(wù)的權(quán)利,未拿到“鎖”的應(yīng)用服務(wù)器不進(jìn)行任何任務(wù)相關(guān)的操作。另外就是這把“鎖”最好還能在下次任務(wù)執(zhí)行時(shí)間點(diǎn)前失效。

(4)Quartz實(shí)現(xiàn)集群思路;

選Quartz的團(tuán)隊(duì)基本上是沖著Quartz本身實(shí)現(xiàn)的集群去的, 不然JDK自帶Timer就可以實(shí)現(xiàn)相同的功能, 而Timer存在的單點(diǎn)故障是生產(chǎn)環(huán)境上所不能容忍的。 在自己造個(gè)有負(fù)載均衡和支持集群(高可用、伸縮性)的調(diào)度框架又影響項(xiàng)目的進(jìn)度, 所以大多數(shù)團(tuán)隊(duì)都直接使用了Quartz來(lái)作為調(diào)度框架

一個(gè)Quartz集群中的每個(gè)節(jié)點(diǎn)是一個(gè)獨(dú)立的Quartz應(yīng)用,它又管理著其他的節(jié)點(diǎn)。這就意味著你必須對(duì)每個(gè)節(jié)點(diǎn)分別啟動(dòng)或停止。Quartz集群中,獨(dú)立的Quartz節(jié)點(diǎn)并不與另一其的節(jié)點(diǎn)或是管理節(jié)點(diǎn)通信,而是通過(guò)相同的數(shù)據(jù)庫(kù)表來(lái)感知到另一Quartz應(yīng)用的

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    335

    瀏覽量

    14277
  • Boot
    +關(guān)注

    關(guān)注

    0

    文章

    149

    瀏覽量

    35731
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    spark集群使用hanlp進(jìn)行分布式分詞操作說(shuō)明

    本篇分享一個(gè)使用hanlp分詞的操作小案例,即在spark集群中使用hanlp完成分布式分詞的操作,文章整理自【qq_33872191】的博客,感謝分享!以下為全文: 分兩步:第一步:實(shí)現(xiàn)
    發(fā)表于 01-21 10:45

    如何在集群部署時(shí)實(shí)現(xiàn)分布式session?

    集群部署時(shí)的分布式 session 如何實(shí)現(xiàn)?
    發(fā)表于 07-17 06:57

    Hadoop集群分布式的搭建步驟

    Hadoop集群分布式搭建
    發(fā)表于 11-04 09:19

    【學(xué)習(xí)打卡】OpenHarmony的分布式任務(wù)調(diào)度

    之前我們分享過(guò)分布式軟總線和分布式數(shù)據(jù)管理,今天主要說(shuō)一OpenHarmony的分布式任務(wù)調(diào)度,分布式
    發(fā)表于 07-18 17:06

    Spring Boot定時(shí)任務(wù)的重寫方法

    Spring Boot應(yīng)該是目前最火的java開源框架了,它簡(jiǎn)化了我們創(chuàng)建一個(gè)web服務(wù)的過(guò)程,讓我們可以在很短時(shí)間、基本零配置就可以啟動(dòng)一個(gè)web服務(wù)。
    的頭像 發(fā)表于 01-20 17:38 ?2378次閱讀

    SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)

    spring boot項(xiàng)目中,可以通過(guò) @EnableScheduling 注解和@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù),也可以通過(guò)SchedulingConfigurer接口來(lái)實(shí)現(xiàn)定時(shí)任務(wù)
    的頭像 發(fā)表于 09-24 09:49 ?2877次閱讀
    SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停<b class='flag-5'>定時(shí)任務(wù)</b>

    Python定時(shí)任務(wù)的實(shí)現(xiàn)方式

    在日常工作中,我們常常會(huì)用到需要周期性執(zhí)行的任務(wù),一種方式是采用 Linux 系統(tǒng)自帶的 crond 結(jié)合命令行實(shí)現(xiàn)。另外一種方式是直接使用Python。接下來(lái)整理的是常見的Python定時(shí)任務(wù)
    的頭像 發(fā)表于 10-08 15:20 ?5522次閱讀

    說(shuō)說(shuō)Spring定時(shí)任務(wù)如何大規(guī)模企業(yè)級(jí)運(yùn)用

    定時(shí)任務(wù)是業(yè)務(wù)應(yīng)用開發(fā)中非常普遍存在的場(chǎng)景(如:每分鐘掃描超時(shí)支付的訂單,每小時(shí)清理一次數(shù)據(jù)庫(kù)歷史數(shù)據(jù),每天統(tǒng)計(jì)前一天的數(shù)據(jù)并生成報(bào)表等等),解決方案很多,Spring 框架提供了一種通過(guò)注解來(lái)配置定時(shí)任務(wù)的解決方案,接入非常的
    的頭像 發(fā)表于 11-04 09:36 ?643次閱讀

    xxl-job任務(wù)調(diào)度中間件解決定時(shí)任務(wù)的調(diào)度問(wèn)題

    xxl-job是一款非常優(yōu)秀的任務(wù)調(diào)度中間件,輕量級(jí)、使用簡(jiǎn)單、支持分布式等優(yōu)點(diǎn),讓它廣泛應(yīng)用在我們的項(xiàng)目中,解決了不少定時(shí)任務(wù)的調(diào)度問(wèn)題。
    的頭像 發(fā)表于 01-31 09:53 ?1725次閱讀

    Spring Boot中整合兩種定時(shí)任務(wù)的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個(gè) Spring 中的定時(shí)任務(wù)實(shí)現(xiàn)策
    的頭像 發(fā)表于 04-07 14:55 ?1460次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>中整合兩種<b class='flag-5'>定時(shí)任務(wù)</b>的方法

    Spring Boot中如何使用定時(shí)任務(wù)

    本文介紹在 Spring Boot 中如何使用定時(shí)任務(wù),使用非常簡(jiǎn)單,就不做過(guò)多說(shuō)明了。
    的頭像 發(fā)表于 04-12 10:56 ?915次閱讀

    如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?

    如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?那么我們一起看看具體怎么實(shí)現(xiàn),先看下本節(jié)大綱: (1)思路說(shuō)明; (2)代碼解析; (3)修改定時(shí)任務(wù)執(zhí)行周期特別說(shuō)明;
    的頭像 發(fā)表于 04-12 11:06 ?1019次閱讀

    spring分布式框架有哪些

    Spring分布式框架。 Spring Cloud Spring Cloud是基于Spring Boo
    的頭像 發(fā)表于 11-16 10:58 ?707次閱讀

    springclould分布式教程

    Spring Cloud是一個(gè)基于Spring Boot分布式系統(tǒng)開發(fā)工具,它提供了一系列的分布式系統(tǒng)解決方案,可以幫助開發(fā)者快速構(gòu)建和部
    的頭像 發(fā)表于 11-16 10:59 ?422次閱讀

    springcloud如何實(shí)現(xiàn)分布式

    Spring Cloud是基于Spring Boot開發(fā)的一套分布式系統(tǒng)解決方案,它主要包括了多個(gè)子項(xiàng)目,如服務(wù)注冊(cè)與發(fā)現(xiàn)、配置中心、負(fù)載均衡、斷路器、路由等等。通過(guò)使用
    的頭像 發(fā)表于 11-16 11:01 ?602次閱讀