溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java版電子商務(wù)spring cloud分布式微服務(wù)b2b2c-Spring Cloud Task

發(fā)布時間:2020-08-04 20:22:11 來源:ITPUB博客 閱讀:140 作者:gung123 欄目:軟件技術(shù)

Spring Cloud Task的目標(biāo)是為Spring Boot應(yīng)用程序提供創(chuàng)建短運(yùn)行期微服務(wù)的功能。

在Spring Cloud Task中,我們可以靈活地動態(tài)運(yùn)行任何任務(wù),按需分配資源并在任務(wù)完成后檢索結(jié)果。Tasks是

Spring Cloud Data Flow中的一個基礎(chǔ)項目,了解springcloud架構(gòu)可以加求求:三五三六二四七二五九,允許用戶

將幾乎任何Spring Boot應(yīng)用程序作為一個短期任務(wù)執(zhí)行。

Spring Cloud Task的生命周期

現(xiàn)代的云平臺都是圍繞著長生命周期的服務(wù)而設(shè)計的,如web應(yīng)用,一經(jīng)啟用,除非手動去重啟應(yīng)用,否則就會沒有

終點(diǎn)的持續(xù)運(yùn)行。雖然大多數(shù)平臺都有方法在不重啟應(yīng)用的情況下,將服務(wù)的生命周期推向終點(diǎn),但每個服務(wù)的處理

結(jié)果難以以可重用的方式來維護(hù)。Spring Cloud Task可以在平臺環(huán)境中執(zhí)行短生命周期的應(yīng)用,并記錄這些應(yīng)用的

結(jié)果,經(jīng)由通過消息通知的機(jī)制來集成各個tasks。通過這特性就可以實(shí)現(xiàn)讓短生命周期的應(yīng)用像長生命周期的應(yīng)用一

樣組成微服務(wù)架構(gòu)。

Spring Task Cloud的方式對現(xiàn)代的云環(huán)境是非常有用的,但它也在部署應(yīng)用方面帶來新問題。如使用調(diào)度器(如corn)

來執(zhí)行Spring Boot應(yīng)用時,如何在應(yīng)用結(jié)束后監(jiān)控到其執(zhí)行結(jié)果?

Spring Cloud Task采用的方法是,將Spring Boot應(yīng)用分為開始、結(jié)束、以及正在運(yùn)行等狀態(tài)。如批處理任務(wù)就是一個

清晰的短生命周期應(yīng)用,Spring Cloud Task會監(jiān)控指定任務(wù)的所有生命周期事件。

生命周期是一個任務(wù)task實(shí)例運(yùn)行的全過程,也是一個被配置為task的Spring Boot應(yīng)用被執(zhí)行的過程(通過 添加@

EnableTask注解配置)。

在task剛剛開始運(yùn)行時(CommandLineRunner或ApplicationRunner及其子類的實(shí)例被執(zhí)行之前)TaskRespository會

創(chuàng)建一條task紀(jì)錄并將其標(biāo)記為start狀態(tài)。start事件由spring框架的SmartLifecycle#start觸發(fā)。開始事件被觸發(fā)說明

了系統(tǒng)已經(jīng)做好了執(zhí)行CommandLineRunner或ApplicationRunner及其子類的實(shí)例的準(zhǔn)備。

任務(wù)紀(jì)錄只有在 ApplicationContext被成功啟動后才會被紀(jì)錄。如果ApplicationContext沒有被成功啟動,那么task

的相關(guān)信息也不會被紀(jì)錄。

當(dāng)Spring Boot應(yīng)用的所有*Runner#run接口都被調(diào)用后,或者在ApplicationContext發(fā)生了失敗(由

ApplicationFailedEvent來表現(xiàn)),任務(wù)倉庫中此任務(wù)的執(zhí)行結(jié)果都會被更新。

task 完成之后(*Runner#run方法被執(zhí)行完)默認(rèn)情況下會被關(guān)閉ApplicationContext。這個特性可以在配置文件中

設(shè)置spring.cloud.task.closecontext_enable屬性為false來更改。

其實(shí)現(xiàn)原理如下面代碼所示:

 public class TaskLifecycleListener{
        ...
        /**
         * 在發(fā)生task相關(guān)的事件后,會自動調(diào)用這個方法
         * Utilizes {@link ApplicationEvent}s to determine the start, end, and failure of a
         * task.  Specifically:
         * <ul>
         *     <li>{@link ContextRefreshedEvent} - Start of a task</li>
         *     <li>{@link ApplicationReadyEvent} - Successful end of a task</li>
         *     <li>{@link ApplicationFailedEvent} - Failure of a task</li>
         * </ul>
         *
         * @param applicationEvent The application being listened for.
         */
        @Override
        public void onApplicationEvent(ApplicationEvent applicationEvent) {
            if(applicationEvent instanceof ApplicationFailedEvent) {
                this.applicationFailedEvent = (ApplicationFailedEvent) applicationEvent;
                doTaskEnd();
            }
            else if(applicationEvent instanceof ExitCodeEvent){
                this.exitCodeEvent = (ExitCodeEvent) applicationEvent;
            }
            else if(applicationEvent instanceof ApplicationReadyEvent) {
                doTaskEnd();
            }
        }
        }
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI