LTS分散式任務框架light-task-scheduler環境搭建
阿新 • • 發佈:2019-02-08
背景
- LTS是一個很不錯的分散式任務框架,不但提供了非常全面的任務功能,而且還提供了一套很強大的監控後臺LTS-admin。
- 和功能的強大相比,LTS的文件就顯得令人汗顏了。我覺得這是致使LTS沒有真正普及的罪魁禍首。
- 由於我本身搭建LTS環境的時候,耗費了不少時間,為了方便想使用LTS的同學不在浪費時間,特把環境搭建這部分總結一下。本文不涉及具體的LTS知識點,環境搭建好後,可以參照文末的連結地址來學習LTS知識點。LTS原始碼也是簡單易懂,網路上找不到說明的時候,檢視原始碼可以讓你更快的明白引數的含義。
1. 環境準備
1. 安裝執行zookepper 2. 安裝執行mysql 建立一個名字為lts的新資料庫
2. LTS-admin安裝
1. 匯入https://github.com/ltsopensource/light-task-scheduler.git專案
2. windows環境的話,執行build.cmd,linux執行build.sh進行編譯
3. 匯入lts-admin子工程
lts-admin子工程轉化為maven工程後的整體目錄
4. 修改lts-admin.cfg,lts-monitor.cfg配置
lts-admin.cfg,自行修改zookeeper和mysql配置
// 後臺的使用者名稱密碼
console.username=admin
console.password=admin
# 註冊中心地址,可以是zk,也可以是redis
registryAddress=zookeeper://127.0.0.1:2181
# registryAddress=redis://127.0.0.1:6379
# 叢集名稱
clusterName=test_cluster
# zk客戶端,可選值 zkclient, curator
configs.zk.client=zkclient
# ------ 這個是Admin儲存資料的地方,也可以和JobQueue的地址一樣 ------
configs.jdbc.url=jdbc:mysql://127.0.0.1:3306/lts
configs.jdbc.username=fiora
configs.jdbc.password=fiora
# admin 資料使用mysql 預設 mysql, 可以自行擴充套件
jdbc.datasource.provider=mysql
# 使用 可選值 fastjson, jackson
# configs.lts.json=fastjson
# 是否在admin啟動monitor服務, monitor服務也可以單獨啟動
lts.monitorAgent.enable=true
#======================以下相關配置是JobTracker的JobQueue和JobLogger的相關配置 要保持和JobTracker一樣==========================
## (可選配置)jobT. 開頭的, 因為JobTracker和Admin可能使用的資料庫不是同一個
# LTS業務日誌, 可選值 mysql, mongo
jobT.job.logger=mysql
# ---------以下是任務佇列配置-----------
# 任務佇列,可選值 mysql, mongo
jobT.job.queue=mysql
# ------ 1. 如果是mysql作為任務佇列 (如果不配置,表示和Admin的在一個數據庫)------
# jobT.jdbc.url=jdbc:mysql://127.0.0.1:3306/lts
# jobT.jdbc.username=root
# jobT.jdbc.password=root
# ------ 2. 如果是mongo作為任務佇列 ------
# jobT.mongo.addresses=127.0.0.1:27017
# jobT.mongo.database=lts
# jobT.mongo.username=xxx #如果有的話
# jobT.mongo.password=xxx #如果有的話
# admin 資料使用mysql 預設 mysql, 可以自行擴充套件
# jobT.jdbc.datasource.provider=mysql
lts-monitor.cfg,自行修改zookeeper和mysql配置
# 註冊中心地址,可以是zk,也可以是redis
registryAddress=zookeeper://127.0.0.1:2181
# registryAddress=redis://127.0.0.1:6379
# 叢集名稱
clusterName=test_cluster
# LTS業務日誌, 可選值 mysql, mongo
configs.job.logger=mysql
# zk客戶端,可選值 zkclient, curator
configs.zk.client=zkclient
# ---------以下是任務佇列配置-----------
# 任務佇列,可選值 mysql, mongo
configs.job.queue=mysql
# ------ 1. 如果是mysql作為任務佇列 ------
configs.jdbc.url=jdbc:mysql://127.0.0.1:3306/lts
configs.jdbc.username=fiora
configs.jdbc.password=fiora
# ------ 2. 如果是mongo作為任務佇列 ------
configs.mongo.addresses=127.0.0.1:27017
configs.mongo.database=lts
# configs.mongo.username=xxx #如果有的話
# configs.mongo.password=xxx #如果有的話
# admin 資料使用mysql, h2 預設 h2 embedded
jdbc.datasource.provider=mysql
# 使用 可選值 fastjson, jackson
# configs.lts.json=fastjson
5. tomcat新增lts-admin,啟動
6. 訪問http://localhost:8080/lts-admin/,預設使用者名稱密碼admin/admin
3. lts-examples例子演示
1. 匯入https://github.com/ltsopensource/lts-examples.git專案
2. 匯入lts-example-jobclient-spring-xml子專案,並轉化為maven專案
執行Main.java後,在LTS-admin後臺看jobclient
3. 匯入lts-example-jobtracker-spring-xml子專案,並轉化為maven專案
lts-jobtracker.xml,自行修改zookeeper和mysql配置
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd"
>
<bean id="jobTracker" class="com.github.ltsopensource.spring.JobTrackerFactoryBean" init-method="start">
<property name="clusterName" value="test_cluster"/>
<property name="registryAddress" value="zookeeper://127.0.0.1:2181"/>
<property name="listenPort" value="30005"/>
<property name="configs">
<props>
<prop key="job.logger">mysql</prop>
<prop key="job.queue">mysql</prop>
<prop key="jdbc.url">jdbc:mysql://127.0.0.1:3306/lts</prop>
<prop key="jdbc.username">fiora</prop>
<prop key="jdbc.password">fiora</prop>
</props>
</property>
</bean>
</beans>
執行Main.java後,在LTS-admin後臺看jobtracker
4. 匯入lts-example-tasktracker-spring-xml-shard子專案,並轉化為maven專案
lts-tasktracker-shard-xml.xml,自行修改zookeeper配置
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd"
>
<bean id="springBean" class="com.github.ltsopensource.example.SpringBean"/>
<!-- 方式1 -->
<!-- 註解方式 -->
<context:component-scan base-package="com.github.ltsopensource.example"/>
<bean id="taskTracker" class="com.github.ltsopensource.spring.TaskTrackerAnnotationFactoryBean" init-method="start">
<!-- 使用JobRunnerItem註解一定要使用 JobDispatcher -->
<property name="jobRunnerClass" value="com.github.ltsopensource.spring.tasktracker.JobDispatcher"/>
<!-- 如果指定為taskId, 取job.getTaskId() , 否則從 job.getParam("shardField") -->
<property name="shardField" value="taskId"/>
<property name="bizLoggerLevel" value="INFO"/>
<property name="clusterName" value="test_cluster"/>
<property name="registryAddress" value="zookeeper://127.0.0.1:2181"/>
<property name="nodeGroup" value="test_trade_TaskTracker"/>
<property name="workThreads" value="64"/>
<property name="configs">
<props>
<prop key="job.fail.store">mapdb</prop>
</props>
</property>
</bean>
<bean id="xmlJobScheduler" class="com.github.ltsopensource.example.XmlJobScheduler"/>
<bean class="com.github.ltsopensource.spring.tasktracker.MethodInvokingJobRunner">
<property name="targetObject" ref="xmlJobScheduler"/>
<property name="targetMethod" value="runJob2"/>
<property name="shardValue" value="222"/>
</bean>
<bean class="com.github.ltsopensource.spring.tasktracker.MethodInvokingJobRunner">
<property name="targetObject" ref="xmlJobScheduler"/>
<property name="targetMethod" value="runJob1"/>
<property name="shardValue" value="111"/>
</bean>
</beans>
執行Main.java後,在LTS-admin後臺看TaskTracker
5. 新增一個實時任務,熟悉任務新增和執行流程
lts-tasktracker-shard-xml.xml裡面已經定義了兩個任務:
1: taskId為111的任務,關聯到了XmlJobScheduler.runJob1方法
<bean class="com.github.ltsopensource.spring.tasktracker.MethodInvokingJobRunner">
<property name="targetObject" ref="xmlJobScheduler"/>
<property name="targetMethod" value="runJob1"/>
<property name="shardValue" value="111"/>
</bean>
2: taskId為222的任務,關聯到了XmlJobScheduler.runJob2方法
<bean class="com.github.ltsopensource.spring.tasktracker.MethodInvokingJobRunner">
<property name="targetObject" ref="xmlJobScheduler"/>
<property name="targetMethod" value="runJob2"/>
<property name="shardValue" value="222"/>
</bean>
在LTS-admin後臺新增任務:
由於是實時任務,任務會立即執行,檢視任務日誌
對應的程式碼: