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版本沒有手動新增任務功能