温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何正确的使用elastic-job

发布时间:2021-06-18 17:45:05 来源:亿速云 阅读:140 作者:Leah 栏目:大数据

本篇文章为大家展示了如何正确的使用elastic-job,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1、Docker基础命令
docker ps 列出当前正在运行的容器
docker ps -a 列出全部的容器
docker rm 容器ID 移除容器
docker images 全部镜像

运行zookeeper:
docker run --name elasticzookeeper -p 2181:2181 -v /Users/abc/Desktop/WorkSpace/DockerData/elsaticzookeeper/data:/data/ -d zookeeper
docker run 运行一个容器  —name 给容器起个名字(标识,docker不能重复) -p 宿主端⼝口:容器器端⼝口  -v  宿主⽬目录:容器器⽬目录,挂载磁盘卷  -d 后台运行容器

docker exec -it 容器id  bash  登录到容器中
2、elastic-job

我们可以参考官方的文档(有中文的),很详细有具体的使用,http://elasticjob.io/docs/elastic-job-lite/00-overview/

elastic-job是什么:

(摘自官网)Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务;Job-Cloud采用自研Mesos Framework的解决方案,额外提供资源治理、应用分发以及进程隔离等功能(PS:我在这里只说Elastic-Job-Lite,因为Job-Cloud我没去研究)。 简单的说Elastic-Job-Lite就是一个分布式定时任务。

怎么使用elastic-job:
1、maven依赖:
<dependency>
  <groupId>com.dangdang</groupId>
  <artifactId>elastic-job-lite-spring</artifactId>
  <version>2.1.5</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.dangdang/elastic-job-lite-core -->
<dependency>
  <groupId>com.dangdang</groupId>
  <artifactId>elastic-job-lite-core</artifactId>
  <version>2.1.5</version>
</dependency>
2、简单的列子
2.1写简单的定时任务的代码
public class FirstSimpleJobDemo implements SimpleJob {

    private static final Logger logger = LoggerFactory.getLogger(FirstSimpleJobDemo.class);

    @Override
    public void execute(ShardingContext shardingContext) {

        int shardingTotalCount = shardingContext.getShardingTotalCount();
        int item = shardingContext.getShardingItem();
        String shardingParameter = shardingContext.getShardingParameter();

        logger.info("shardingTotalCount:{},shardingParameter:{}",shardingTotalCount,shardingParameter);

        logger.info("----- ThredID:{},当前分片项:{}",Thread.currentThread().getId(),item);



    }
}

只要实现SimpleJob类然后实现execute就可以了,在execute中写我们的定时任务处理逻辑。

(摘自官网)SimpleJob 意为简单实现,未经任何封装的类型。需实现SimpleJob接口。该接口仅提供单一方法用于覆盖,此方法将定时执行。与Quartz原生接口相似,但提供了弹性扩缩容和分片等功能。 看下官方的demo

public class MyElasticJob implements SimpleJob {
    
    @Override
    public void execute(ShardingContext context) {
        switch (context.getShardingItem()) {
            case 0: 
                // do something by sharding item 0
                break;
            case 1: 
                // do something by sharding item 1
                break;
            case 2: 
                // do something by sharding item 2
                break;
            // case n: ...
        }
    }
}

使用context.getShardingItem()使用多线程对不同的数据做不同的处理。

  • 我们还可以实现Dataflow类型作业用来处理流作业,Script类型作业,用来处理脚本作业。具体可以查看官方文档。

2.2定时任务的配置:

a)需要配置注册中心

代码如下:

<reg:zookeeper id="regCenter" server-lists="localhost:2181" namespace="elsatic-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" />

其中参数的意思为:

  • server-lists 连接Zookeeper服务器的列表

  • namespace Zookeeper的命名空间

  • base-sleep-time-milliseconds 等待重试的间隔时间的初始值

  • max-sleep-time-milliseconds 等待重试的间隔时间的最大值

  • maxRetries 最大重试次数

其具体使用和参数的单位等请去官网的配置手册中查看。

b)配置任务

<!-- 配置作业-->
<job:simple id="demoSimpleSpringJob" class="org.chen.demo.FirstSimpleJobDemo"
            registry-center-ref="regCenter" cron="0 0/2 * * * ?" sharding-total-count="2" sharding-item-parameters="0=A,1=B" overwrite="true"/>

其中参数的意思为:

  • id 作业名称

  • class 作业实现类,需实现ElasticJob接口

  • registry-center-ref 注册中心Bean的引用,需引用reg:zookeeper的声明

  • sharding-total-count 作业分片总数

  • sharding-item-parameters 分片序列号和参数用等号分隔,多个键值对用逗号分隔 分片序列号从0开始,不可大于或等于作业分片总数

  • overwrite 本地配置是否可覆盖注册中心配置,如果可覆盖,每次启动作业都以本地配置为准

具体使用可以参考官方配置手册。需要注意,overwrite这个参数默认为false

3、运维平台:
  1. 从github把console的代码下载下来然后运行代码,然后输入http://localhost:8899/即可访问控制台。8899为默认端口号,可通过启动脚本输入-p自定义端口号。

  2. 进入平台,新建全局配置,填写注册中心名称(就是自己好辨识是哪个项目或者那块业务相关的),注册中心地址(zookeeper的地址),命名空间需要和定时任务项目中配置的一致,加完后点击连接按钮,连接上后可进行下步操作

  3. 进入作业操作->作业维度 显示每个定时任务,然后可以操作每个定时任务

  4. 进入作业操作->服务器维度 显示服务器的IP,运行任务的个数等。

上述内容就是如何正确的使用elastic-job,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI