千家信息网

如何正确的使用elastic-job

发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,本篇文章为大家展示了如何正确的使用elastic-job,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、Docker基础命令docker ps 列出当前正在
千家信息网最后更新 2024年12月02日如何正确的使用elastic-job

本篇文章为大家展示了如何正确的使用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 zookeeperdocker 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依赖:
  com.dangdang  elastic-job-lite-spring  2.1.5  com.dangdang  elastic-job-lite-core  2.1.5
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)需要配置注册中心

代码如下:

其中参数的意思为:

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

  • namespace Zookeeper的命名空间

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

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

  • maxRetries 最大重试次数

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

b)配置任务

其中参数的意思为:

  • 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,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0