Elastic-job使用及原理
一、原理
elastic-job有lite版和cloud版,最大的區別是有無調度中心,筆者采用的是lite版本,無中心化。
tips:
-
第一臺服務器上線觸發主服務器選舉。主服務器一旦下線,則重新觸發選舉,選舉過程中阻塞,只有主服務器選舉完成,才會執行其他任務。
-
某作業服務器上線時會自動將服務器信息注冊到注冊中心,下線時會自動更新服務器狀態。
-
主節點選舉,服務器上下線,分片總數變更均更新重新分片標記。
-
定時任務觸發時,如需重新分片,則通過主服務器分片,分片過程中阻塞,分片結束后才可執行任務。如分片過程中主服務器下線,則先選舉主服務器,再分片。
-
通過上一項說明可知,為了維持作業運行時的穩定性,運行過程中只會標記分片狀態,不會重新分片。分片僅可能發生在下次任務觸發前。
-
每次分片都會按服務器IP排序,保證分片結果不會產生較大波動。
-
實現失效轉移功能,在某臺服務器執行完畢后主動抓取未分配的分片,并且在某臺服務器下線后主動尋找可用的服務器執行任務。
?作業啟動流程
?
?
作業執行流程
?
二、應用
引入maven依賴
<!-- elastic-job start -->
<dependency>
? ? <groupId>com.dangdang</groupId>
? ? <artifactId>elastic-job-lite-core</artifactId>
? ? <version>2.0.0</version>
</dependency>
<dependency>
? ? <groupId>com.dangdang</groupId>
? ? <artifactId>elastic-job-lite-spring</artifactId>
? ? <version>2.0.0</version>
</dependency>
<!-- elastic-job end -->
<!-- zookeeper -->
<dependency>
? ? <groupId>org.apache.zookeeper</groupId>
? ? <artifactId>zookeeper</artifactId>
? ??<version>3.4.9</version>
</dependency>
作業開發
public class TestTask implements SimpleJob{
? ??public void execute(ShardingContext context) {
System.out.println("定時任務測試");
? ??}
}
作業配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:reg="http://www.dangdang.com/schema/ddframe/reg"
? ? xmlns:job="http://www.dangdang.com/schema/ddframe/job"
? ? xsi:schemaLocation="http://www.springframework.org/schema/beans
? ??? ??http://www.springframework.org/schema/beans/spring-beans.xsd
? ??? ??http://www.dangdang.com/schema/ddframe/reg
? ??? ??http://www.dangdang.com/schema/ddframe/reg/reg.xsd
? ??? ??http://www.dangdang.com/schema/ddframe/job
? ??? ??http://www.dangdang.com/schema/ddframe/job/job.xsd
? ??? ??">
<!-- 配置注冊中心 ,任務的信息都會在zk中存儲 -->
<reg:zookeeper id="regCenter" server-lists="127.0.0.1:2181" namespace="test-job"
? ? base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" />
<!-- 配置簡單作業 ? -->
<job:simple id="testTask"
? ??class="com.xxx.TestTask"
? ??registry-center-ref="regCenter" cron="0 10 * * * ?"
? ??sharding-total-count="1" overwrite="true"><!-- 分片為1,即不需要分片;支持覆蓋,即會用本次的配置覆蓋緩存在zk中的配置 -->
? ??<job:event-log /><!--?job運行日志記錄到log?-->
? ??<job:event-rdb driver="${ds1.jdbc.driver_class_name}"?<!-- job運行日志記錄到DB, 詳細參考:http://dangdangdotcom.github.io/elastic-job/post/user_guide/common/event_trace/-->
? ??? ??url="${ds1.jdbc.url}" username="${ds1.jdbc.username}" password="${ds1.jdbc.password}"
? ??? ??log-level="INFO" />
</job:simple>
</beans>
三、運維工具
部署方式
部署運維平臺war文件(elastic-job-lite-console.war)至任何支持Servlet的Web容器(可選)。 運維平臺以war包形式提供,可自行部署至tomcat或jetty等支持servlet的web容器中。elastic-job-console.war可通過mvn install編譯或maven中央倉庫獲取。
WEB-INF/classes/conf/auth.properties記錄的是登錄用戶和密碼
功能說明
兩個維度查看:job維度、服務器維度
job維護:手動觸發job,停止job,刪除job,修改job配置,job狀態查看。lite版本沒有手動添加任務功能
轉載于:https://www.cnblogs.com/acyouai/p/6702044.html
總結
以上是生活随笔為你收集整理的Elastic-job使用及原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java+Oracle实现事务——JDB
- 下一篇: IO流入门-第十二章-ObjectInp