日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java Elastic Job動態添加任務實現過程解析

瀏覽:26日期:2022-08-27 11:16:15

背景

在使用Elastic-Job的過程中,有很多人遇到了這么一個問題,就是如何動態的去添加任務?

在官方的文檔中也有對此作出回答,如下:

動態添加作業這個概念每個人理解不盡相同。

elastic-job-lite為jar包,由開發或運維人員負責啟動。啟動時自動向注冊中心注冊作業信息并進行分布式協調,因此并不需要手工在注冊中心填寫作業信息。 但注冊中心與作業部署機無從屬關系,注冊中心并不能控制將單點的作業分發至其他作業機,也無法將遠程服務器未啟動的作業啟動。elastic-job-lite并不會包含ssh免密管理等功能。

elastic-job-cloud為mesos框架,由mesos負責作業啟動和分發。 但需要將作業打包上傳,并調用elastic-job-cloud提供的REST API寫入注冊中心。 打包上傳屬于部署系統的范疇elastic-job-cloud并未涉及。

綜上所述,elastic-job已做了基本動態添加功能,但無法做到真正意義的完全自動化添加。

接下來談談我對動態任務的理解,我眼中的動態任務分為2種:

一種是全新的任務,包括實現的邏輯也是全新的,也就是當我們的程序打成一個jar包后,線上已經在運行了,這個時候我加了一個新的任務,如何能做到不停服務,將這個任務集成到已有的任務中去,這個實現起來難度比較大,涉及到Java類的熱加載等,不過最近阿里又有一開源大作JarsLink,GitHub地址:https://github.com/alibaba/jarslink,可以支持在運行時動態加載到系統中,實現不需要重啟和發布系統新增功能。還有一種實現思路我們可以利用Groovy腳本來做這樣的事情,一般情況下重啟來發布新的任務會比較常見,如果各位一定要實現動態的任務可以自己嘗試著去研究下我提供的思路。

另一種就是執行的業務邏輯不變,只是運行的時間發生變化。比如文章的定時發布,可以設置文章在某天的某分鐘進行自動發布,實現這個功能有多種方式,你可以不停的掃描任務,一到時間點就自動發布,比較優雅的方式就是為每篇文章的自動發布都設置一個任務,通過Cron表達式來指定執行時間,不同的是每個任務都有自己的參數,業務邏輯都是固定的定時發布。接下來我給大家介紹下Elastic-Job實現上面講的第二種動態任務的方式,也就是任務的實現邏輯已經是存在的,只是需要發布成多個不同時間去觸發的任務。

實戰

實現任務的動態添加比較簡單,只需要接收任務的信息,然后初始化一下就可以了,在實現的過程中筆者遇到了一個麻煩的問題?

在多節點分片任務卻只有一個節點能執行,問題原因在于當有任務A和任務B,2個節點的時候,我們調用A節點的接口進行任務的動態添加,在A節點中初始化了任務調度器,數據也存儲到了注冊中心,但是B節點是不知道有新的任務添加,默認的使用方法是每個節點在啟動時去初始化任務調度器,而我們的B節點已經啟動過了,任務是新添加的。

解決這個問題最簡單的方式就是將任務的節點都集中管理起來,無論動態任務在哪個節點上進行注冊,都需要將這個請求轉發到其他的節點上進行初始化操作,這樣就可以保證多節點分片的任務正常執行。

還有一種對使用者更友好的辦法是對Zookeeper中的節點進行監聽,當有新的節點創建時,就自動獲取這個節點的配置信息,在本地進行任務初始化,通過這樣的方式就可以不用去轉發請求到其他節點了,只要在任何節點有添加操作,都能被監聽到,并自己去初始化。

監控代碼如下:

/** * 開啟任務監聽,當有任務添加時,監聽zk中的數據增加,自動在其他節點也初始化該任務 */public void monitorJobRegister() { CuratorFramework client = zookeeperRegistryCenter.getClient(); @SuppressWarnings('resource') PathChildrenCache childrenCache = new PathChildrenCache(client, '/', true); PathChildrenCacheListener childrenCacheListener = new PathChildrenCacheListener() { public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { ChildData data = event.getData(); switch (event.getType()) { case CHILD_ADDED: String config = new String(client.getData().forPath(data.getPath() + '/config')); Job job = JsonUtils.toBean(Job.class, config); addJob(job); break; default: break; } } }; childrenCache.getListenable().addListener(childrenCacheListener); try { childrenCache.start(StartMode.POST_INITIALIZED_EVENT); } catch (Exception e) { e.printStackTrace(); } }

為了方便大家使用,我將動態添加任務的功能集成到了我之前的elastic-job-spring-boot-starter(https://github.com/yinjihuan/elastic-job-spring-boot-starter)中集成了動態添加的邏輯,大家引入依賴即可使用。

使用方式比較簡單,只需要在啟動類上加一個ComponentScan注解,讓Spring能夠掃描到elastic-job-spring-boot-starter提供的代碼即可:

@SpringBootApplication@EnableElasticJob//開啟動態任務添加API@ComponentScan(basePackages = {'com.cxytiandi'})public class JobApplication { public static void main(String[] args) { new SpringApplicationBuilder().sources(JobApplication.class).web(true).run(args); try { new CountDownLatch(1).await(); } catch (InterruptedException e) { } }}

配置好之后,啟動項目就可以通過REST API來動態的注冊任務,API列表如下:

/job添加任務是POST請求,數據格式為JSON體提交,格式如下:{'jobName':'DynamicJob13','cron':'0 33 16 ?','jobType':'SIMPLE','jobClass':'com.cxytiandi.job.demo.DynamicJob','jobParameter':'2222222','shardingTotalCount':1}

完整字段請參考:

https://github.com/yinjihuan/elastic-job-spring-boot-starter/blob/master/spring-boot-elastic-job-starter/src/main/java/com/cxytiandi/elasticjob/dynamic/bean/Job.java

注意:jobClass必須事先存在于服務中* /job/remove

刪除任務是GET請求,參數只要任務名稱即可,比如:/job/remove?jobName=任務名。可以用于任務完成之后清空注冊中心的任務信息。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜国产一区二区| 国产一区福利| 三级在线看中文字幕完整版| 免费在线播放第一区高清av| 精品黄色一级片| 国产成人精品一区二区三区视频 | 亚洲香蕉久久| 在线观看一区| 91精品丝袜国产高跟在线| 日本成人精品| 久久不卡日韩美女| 亚洲天堂av影院| 黄色不卡一区| 日韩欧美激情电影| 久久久精品区| 日本在线精品| 视频精品一区二区| 国产精品一区二区三区av| 另类欧美日韩国产在线| 中文字幕在线视频网站| 欧美肉体xxxx裸体137大胆| 一区福利视频| 日韩欧美中文字幕电影| 国产精品巨作av| 97精品在线| 婷婷综合网站| 日韩一区二区三区四区五区| 国产图片一区| 日本精品在线中文字幕| 日韩制服丝袜av| 美女久久久久久| 蜜臀91精品国产高清在线观看| 蜜臀va亚洲va欧美va天堂| 国产精品欧美日韩一区| 蜜臀久久精品| 丝袜国产日韩另类美女| 国产精品黄色| 狠狠久久婷婷| 国产精品成人自拍| 成人福利视频| 日韩中文字幕一区二区三区| 久久香蕉网站| 国产亚洲激情| 久久一区亚洲| 午夜精品福利影院| 美女av在线免费看| 亚洲网址在线观看| 成人在线免费观看网站| 国产精品女主播一区二区三区| 国产精品亚洲一区二区在线观看| 视频在线观看国产精品| 精品国产乱码久久久久久樱花| 99精品一区| 国产欧美精品| 亚洲精品在线影院| 日韩av一二三| 亚洲欧美伊人| 久久久免费人体| 免费不卡在线视频| 日韩电影免费网址| 欧美日一区二区三区在线观看国产免 | 国产日产一区| 激情欧美亚洲| 美女久久久久久| 国产日韩专区| 中文字幕在线高清| 日韩国产一区二| 午夜久久美女| 福利在线一区| 欧美亚洲一区二区三区| 亚州av乱码久久精品蜜桃| 美腿丝袜在线亚洲一区| 中文字幕亚洲精品乱码| 欧美成人亚洲| 一区二区三区四区日本视频| 国产精品一级| 亚洲精品激情| 日韩视频不卡| 私拍精品福利视频在线一区| 国产精品欧美日韩一区| 亚洲区国产区| 91久久黄色| 成人羞羞在线观看网站| 国产精品视频一区视频二区| 亚洲视频国产精品| 欧美日韩国产高清电影| 97人人精品| 精品午夜av| 国产精品a级| 日韩久久99| 亚洲三级观看| 国产农村妇女精品一二区| 精品捆绑调教一区二区三区| 久久精品免视看国产成人| 午夜电影一区| 天堂成人免费av电影一区| 亚洲国产不卡| 91精品国产成人观看| 国产成人精品亚洲线观看| 国产精品视频一区视频二区| 日韩精品导航| 巨乳诱惑日韩免费av| 欧美日韩国产综合网| 久久蜜桃av| 日韩欧美2区| 亚洲精品伊人| 天堂久久一区| 亚洲精品裸体| 亚洲精一区二区三区| 视频一区中文字幕国产| 亚洲一区成人| 美国三级日本三级久久99 | 亚洲一区免费| 亚洲黄页一区| 国产亚洲毛片| 久久成人亚洲| 免费人成在线不卡| 午夜精品福利影院| 日韩高清电影一区| **爰片久久毛片| 欧美一区免费| 国产精品毛片久久久| 久久尤物视频| 美女av在线免费看| 久久精品观看| 亚洲精品97| 久久成人国产| 日韩一区二区三区在线看| 日韩三级久久| 国产精品一区二区美女视频免费看| 欧美日韩精品一区二区三区在线观看| 日韩国产欧美在线视频| 国产乱子精品一区二区在线观看| 91精品国产自产观看在线| 国产精品视频一区二区三区四蜜臂| 国产调教精品| 国产一区二区三区日韩精品| 国产精选在线| 欧美91精品| 日韩专区欧美专区| 日韩av在线免费观看不卡| 国产精品xxx| 日韩深夜视频| 黄色成人精品网站| 亚洲免费毛片| 国产精品免费精品自在线观看| 另类欧美日韩国产在线| av在线最新| 蜜桃成人av| 亚洲人成精品久久久| 国产精品久久久久久久免费软件| 精品视频97| 狠狠操综合网| 日韩精品久久理论片| 国产精品啊v在线| 日本在线高清| 在线看片日韩| 欧美aa在线视频| 激情综合自拍| 日韩av中文字幕一区二区三区| 激情不卡一区二区三区视频在线| 欧美日韩一区二区三区视频播放| 日本欧美在线看| 欧美黄色一区| 久久国产中文字幕| 男人的天堂久久精品| 国产精品一区二区美女视频免费看 | 亚洲高清二区| 日韩精品中文字幕一区二区| 精品美女视频| 99国产成+人+综合+亚洲欧美| 日本午夜精品久久久久| 日韩国产一区| 日本综合精品一区| 国产精品99在线观看| 激情综合网五月| av资源中文在线| 亚洲我射av| 日韩伦理福利| 日韩欧美中文字幕电影| 日韩在线不卡| 日韩区欧美区| 99精品在线观看| 国产欧美视频在线| 婷婷精品进入| 欧美精品二区| 中文日韩在线| 精品国产网站| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品五月天堂| 亚洲免费影视| 成人精品高清在线视频| 免费不卡在线视频| sm久久捆绑调教精品一区| 一区二区三区网站| se01亚洲视频 | 欧美亚洲免费| 黄色日韩在线| 国产videos久久| 中文字幕日韩亚洲|