1. 程式人生 > >Elastic-job使用及原理(轉發)

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("定時任務測試");     }

}

作業配置

<!-- 配置註冊中心 ,任務的資訊都會在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版本沒有手動新增任務功能