定時任務中介軟體_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
版權宣告:本文為博主原創文章,轉載請附上博文連結!