1. 程式人生 > >定時任務中介軟體_taskcontroll

定時任務中介軟體_taskcontroll

轉自:https://blog.csdn.net/xingkong0128/article/details/53689504

           https://blog.csdn.net/xingkong0128/article/details/53689504

 

一、背景
1、由於xx公司目前的定時任務採用的  spring + quartz 的框架,此框架只適用於本地的任務排程,在部署時只能部1臺,對叢集環境支援較弱,所以線上就一直有單點故障的隱患存在;

2、另外從開層面講,採用spring + quartz 的方式,需要寫大量的配置檔案,平均一個任務需要定義 3-4個 bean, 配置檔案繁瑣。

3、不易於日常維護管理(時間表達式修改、暫停、恢復任務)

 

二、目標需求
1、解決單點故障的問題,使任務的執行方能以叢集+負載均衡的方式部署,當業務方主機有任意一臺或多臺離線時,不影響整體業務的執行。

2、日誌集中收集。將任務的執行情況集中收集,量化以下資料:任務平均執行時間、成功率等。

3、簡化客戶端的開發。

4、集中式管理

 

三、客戶端開發說明
1、在專案pom.xml 中匯入以下 jar包

<dependency>

    <groupId>taskcontroller-api</groupId>

    <artifactId>taskcontroller-api</artifactId>

    <version>0.5</version>

</dependency>

<dependency>

    <groupId>jetty</groupId>

    <artifactId>jetty</artifactId>

    <version>6.1.26</version>

    <classifier>jetty-util</classifier>

</dependency>

<dependency>

    <groupId>jetty</groupId>

    <artifactId>jetty</artifactId>

    <version>6.1.26</version>

    <classifier>jetty</classifier>

</dependency>

 

 

2、自定義java類,並實現以下介面  com.cgtz.taskcontroll.executor.TaskExecutor,在execute 方法中完成要執行的任務;

 

import com.cgtz.taskcontroll.executor.TaskExecutor;

@Service

public class TaskExecutorImpl2 implements TaskExecutor {

     public void execute() {

           // 任務執行程式碼

     }

}

 

3、在spring配置檔案中新增 監聽服務:

<beanclass="com.cgtz.taskcontroll.core.TaskServer"init-method="init">

<propertyname="port"value="10005"/>

</bean>

 

4、啟動:以任何方式啟動spring容器,載入 TaskServer 即可,無需依賴外部 servlet容器.

factory = newClassPathXmlApplicationContext("/spring.xml");

factory.start();

 

四、服務端使用說明
1、新增與修改任務
1、登入taskcontroller-server, 地址:http://172.16.34.174:9390/index.htm

2、點選左側導航欄 <任務管理>,開啟相應頁面

3、點選頁面上的<新增>按鈕,彈出新增表單視窗,並完成必填項,

 

注:

1)、任務呼叫url: http://客戶端 ip地址:sprig中配置的埠號/任務的類名

2)、任務狀態:勾選啟用,點選儲存後任務會立即啟動。

 

4、修改

在列表中點選要修改的任務,點選編輯按鈕,彈出編輯視窗,即可完成修改操作。

注:在修改確認時,任務狀態如果為啟用,則通知伺服器重新載入任務配置,並啟動任務。

 

 

2、任務管理
操作按鈕:

Ø  任務資訊維護

增、刪、查、改

 

Ø  恢復

用於恢復已暫停的任務

 

Ø  暫停

用於暫停正在執行中的任務

 

Ø  立即執行

無論任務處理執行中、還是已暫停狀態,都可立即執行該任務一次。

 

Ø  測試連線

用於檢察客戶端連線是否斷開,主要用於檢查 任務呼叫url 和全域性變數配置是否正確。

 

Ø  任務呼叫記錄檢視

選中任何一條任務記錄,下方表格中即會刷出該任務的呼叫記錄詳情。

 

 

3、全域性變數設定
全域性變數的作用:

1、簡化任務url配置, 

2、任務排程的負載均衡與錯誤重試

 

使用舉例:

1、定義一個全域性變數  server_url,有3個值

http://192.168.10.29:10010

http://192.168.10.29:10020

http://192.168.10.29:10030

 

2、此時在任務編輯窗口裡就可以使用以下 url

{server_url}/test.task.TaskExecutorImpl2

它代表test.task.TaskExecutorImpl2  任務釋出在  192.168.10.29:10010、192.168.10.29:10020、192.168.10.29:10030  這三臺機器上,相當於給該任務配了3個可呼叫的地址:

http://192.168.10.29:10010/test.task.TaskExecutorImpl2

http://192.168.10.29:10020/test.task.TaskExecutorImpl2

http://192.168.10.29:10030/test.task.TaskExecutorImpl2

那麼taskcontroll-server在排程時會隨機呼叫其中一臺,如果失敗會呼叫其它機器,直到成功為止。(如果全部失敗,會記錄失敗日誌)

 

 

 

4、伺服器狀態
背景:

Taskcontroll-server 是工作在叢集環境中的,生產環境中會發布多臺,多臺server中同一時間只有一臺會進行任務排程工作,稱為 leader。如果leader 離線, 會通過選舉演算法從其它備用 server中選 出一臺作 leaer,來接管任務排程工作,從而保證業務方定時任務的按時執行。 Leader切換的時間在 500ms左右。

 

本頁面主要用於檢視伺服器狀態,如果出現故障以及時修復。

注:多個taskcontroll-server 相互之間必須要保障通訊正常。

 

配置檔案資訊:

 #服務ID
server_ids=1,2

#服務釋出地址:埠
server_urls=10.151.244.130:8080, 10.162.50.188:8080

5、任務呼叫日誌
該頁面放在首頁,通過該頁面可以檢視每一次任務排程時的詳情資訊。

根據任務名稱、執行結果可篩選相應記錄,單擊一條記錄右側會顯示詳情。

任務執行結果:

Ø  執行中: 業務方主機正在執行任務

Ø  執行成功: 最理想的狀態

Ø  業務異常:指業務方出錯,並返回了相關日誌

Ø  網路故障:指taskcontroll-server與業務方主機網路通訊失敗(嚴重故障)

Ø  執行超時:指taskcontroll-server在15秒內沒有收到業務方主機的反饋資訊。只有業務方主機在執行任務的過程中因各種原因離線,才會導致執行超時,如:硬體宕機、突發網路故障、jvm異常等。

Ø  任務不存在:配置有誤

日誌截圖

五、架構設計圖

基礎架構圖:

核心流程圖:

客戶端流程圖

任務恢復、暫停、立即執行請求流程


--------------------- 
作者:xingkong0128 
來源:CSDN 
原文:https://blog.csdn.net/xingkong0128/article/details/53689504 
版權宣告:本文為博主原創文章,轉載請附上博文連結!