1. 程式人生 > >LTS分散式任務框架light-task-scheduler環境搭建

LTS分散式任務框架light-task-scheduler環境搭建

背景

  • 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專案

匯入light-task-scheduler

2. windows環境的話,執行build.cmd,linux執行build.sh進行編譯
3. 匯入lts-admin子工程

匯入lts-admin子maven工程

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,啟動

tomcat新增lts-admin,啟動

6. 訪問http://localhost:8080/lts-admin/,預設使用者名稱密碼admin/admin

這裡寫圖片描述

3. lts-examples例子演示

1. 匯入https://github.com/ltsopensource/lts-examples.git專案

匯入examples專案

2. 匯入lts-example-jobclient-spring-xml子專案,並轉化為maven專案

匯入lts-example-jobclient-spring-xml子專案,並轉化為maven專案

執行Main.java後,在LTS-admin後臺看jobclient
執行Main.java後,在LTS-admin後臺看jobclient

3. 匯入lts-example-jobtracker-spring-xml子專案,並轉化為maven專案

 匯入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
執行Main.java後,在LTS-admin後臺看jobtracker

4. 匯入lts-example-tasktracker-spring-xml-shard子專案,並轉化為maven專案

匯入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
執行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後臺新增任務:
在LTS-admin後臺新增任務

新增成功

由於是實時任務,任務會立即執行,檢視任務日誌
檢視任務日誌

任務日誌詳細內容

對應的程式碼:
對應的程式碼

4. LTS知識點