一、elastic-job、elastic-job-lite-console使用案例

版权声明:转发请注明,谢谢配合 https://blog.csdn.net/qq_31289187/article/details/84843044

一、elastic-job是当当网开源的分布式框架,实际生产中使用elastic-job做一些定时任务,比如定时生成文件、上传文件、发送邮件、发送短信等等。

二、我的环境

     1、java version 1.8.0_161

     2、Apache Maven 3.5.0

     3、zookeeper3-4-10   zookeeper安装使用,Windows环境下安装类似Linux环境安装

三、案例

         

1、引入jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>elasticJobDemo</groupId>
    <artifactId>elasticJobDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-core</artifactId>
            <version>2.1.5</version>
        </dependency>
        <dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-spring</artifactId>
            <version>2.1.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.2.RELEASE</version>
        </dependency>
    </dependencies>
</project>

2、JobA

package com.cn.dl.job;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;

/**
 * Created by yanshao on 2018/12/5.
 */
public class JobA implements SimpleJob {

    public void execute(ShardingContext shardingContext) {
        System.out.println("JobA>>>>>>>");
    }

}

3、JobB

package com.cn.dl.job;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;

/**
 * Created by yanshao on 2018/12/5.
 */
public class JobB implements SimpleJob {

    public void execute(ShardingContext shardingContext) {
        System.out.println("JobB>>>>getJobName>>>"+shardingContext.getJobName());
        System.out.println("JobB>>>getShardingParameter>>>>"+shardingContext.getShardingParameter());
        System.out.println("JobB>>>>getTaskId>>>"+shardingContext.getTaskId());
        System.out.println("JobB>>>>getShardingItem>>>"+shardingContext.getShardingItem());
        System.out.println("JobB>>>>getShardingTotalCount>>>"+shardingContext.getShardingTotalCount());
    }

}

4、ApplicationJob

package com.cn.dl.main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by yanshao on 2018/12/5.
 */
public class ApplicationJob {

    public static void main(String[] args) {
         new ClassPathXmlApplicationContext("application-job-config.xml");
    }

}

5、application-job-config.xml

<?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
                        ">

    <reg:zookeeper id="jobRegister" server-lists="127.0.0.1:2181" namespace="elasticJobDemo"
                   base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3"/>

    <job:simple id="jobA"
                class="com.cn.dl.job.JobA"
                registry-center-ref="jobRegister"
                cron="0/10 * * * * ? *"
                sharding-total-count="1"/>

    <job:simple id="jobB"
                class="com.cn.dl.job.JobB"
                registry-center-ref="jobRegister"
                cron="0 0 04 * * ? *"
                sharding-total-count="1"/>

</beans>

6、测试

a、JobA每隔10s执行一次

time>>Wed Dec 05 21:10:00 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:10:10 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:10:20 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:10:30 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:10:40 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:10:50 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:11:00 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:11:10 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:11:20 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:11:30 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:11:40 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:11:50 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:12:00 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:12:10 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:12:20 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:12:30 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:12:40 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:12:50 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:13:00 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:13:10 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:13:20 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:13:30 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:13:40 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:13:50 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:14:00 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:14:10 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:14:20 CST 2018  JobA>>>>>>>
time>>Wed Dec 05 21:14:30 CST 2018  JobA>>>>>>>

JobB到凌晨4点执行一次

四、elastic-job-lite-console控制台

1、下载elastic-job源代码,地址:https://github.com/elasticjob/elastic-job-lite

2、解压在指定目录,然后编译生成elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz压缩包

  • 我解压在:E:\elasticejob\elastic-job-lite-dev

  • 开发人员一般都安装了git,如果没有git,打开命令行也是一样的

  • 执行命令:mvn clean install -Dmaven.test.skip=true,等大概5分钟左右就会编译生成,看到Build Success就OK

  • 然后在E:\elasticejob\elastic-job-lite-dev\elastic-job-lite-console\target下,找到生成的elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz压缩包

  • 解压elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz到指定目录
  • 然后在解压目录下找到两个启动脚本,一个是Windows的,一个Linxu的

  • 双击start.bat启动console

  • 全局配置,前三个框分别输入:jobRegister、127.0.0.1:2181、elasticJobDemo

  • 点击连接

  • 打开作业维度,就看到当前两个任务了(前提是启动了ApplicationJob)

  • 这里的修改按钮:我们可以修改配置在application-job-config.xml中的配置,一般我们只会修改Cron表达式

zookeeper命令:https://blog.csdn.net/qq_31289187/article/details/80933365

我们在zookeeper注册中心可以看到我们配置的内容:cron="0/10 * * * * ? *"

比如我在console中把jobA的Cron表达式修改为:cron="0 0 12 * * ? *",然后重新获取值,发现cron的值修改了!

然后就只有jobB继续每隔执行一次了

同样我们可以修改其它内容,zookeeper中的节点内容就会被修改;

触发按钮是我们点击一次,任务就会执行一次;

点击失效,任务暂时不能执行,然后点击生效才会继续在固定时间执行任务;

点击终止,该任务就没有生效一说了,当前任务就下线了,如果想要继续在固定时间执行任务,只能restart 项目了。

  • ShardingContext 对象有这几个主要方法,主要是为了应对一个job中不同的执行任务,比如:我们要给用户发送邮件,我们把用户分成A、B两组,两组邮件除了邮件主题不同,其它内容都相同,这时候我们可以通过配置sharding-item-parameters来进行区分两组邮件,然后同时给用户发送邮件。

  • 修改elastic-job-console中jobB的配置

IDE打印结果:

到这里本地使用elastic-job就差不多了,看看当当网的文档,自己再试试。还有一个问题,我们如何将这个Demo打成jar包扔在Linux服务器上执行?elastic-job-console不需要再折腾了,扔上去执行启动脚本就OK了,还有就是elastic-job-console我们可以修改密码和端口号,我是用winrar打开修改的。

猜你喜欢

转载自blog.csdn.net/qq_31289187/article/details/84843044
今日推荐