首页 > 其他分享 >Elastic-Job使用实践

Elastic-Job使用实践

时间:2023-05-30 19:33:34浏览次数:40  
标签:Elastic Job 实践 job dangdang import com

Elastic-Job是一个分布式任务调度框架,它基于Quartz和Zookeeper实现,提供了简单易用的任务调度和分布式任务处理能力。Elastic-Job支持任务的动态添加、删除、暂停和恢复,同时还具备故障转移和弹性扩容的能力。下面是Elastic-Job的介绍以及使用Java代码实现的入门示例:

Elastic-Job的介绍:
Elastic-Job是一个开源的分布式任务调度框架,它解决了传统任务调度框架的单点故障和扩展性问题。Elastic-Job基于分布式协调服务Zookeeper,通过将任务进行分片并分配给多个节点执行,实现了任务的高可用和负载均衡。Elastic-Job提供了简单易用的API和丰富的配置选项,可以灵活地管理和调度各种类型的分布式任务。

下面是使用Java代码实现Elastic-Job的入门示例:

  1. 添加依赖:
    在项目的构建文件(例如Maven的pom.xml)中添加Elastic-Job的依赖:
<dependency>
    <groupId>com.dangdang</groupId>
    <artifactId>elastic-job-lite-core</artifactId>
    <version>2.1.4</version>
</dependency>
  1. 创建作业:
    创建一个名为MyJob.java的类,并实现SimpleJob接口中的execute方法。示例代码如下:
public class MyJob implements SimpleJob {
    @Override
    public void execute(ShardingContext context) {
        System.out.println("Hello Elastic-Job!");
    }
}
  1. 配置作业:
    创建一个名为JobConfig.java的类,并添加以下代码:
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.JobTypeConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.lite.api.JobScheduler;
import com.dangdang.ddframe.job.lite.api.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.api.listener.AbstractDistributeOnceElasticJobListener;
import com.dangdang.ddframe.job.lite.api.listener.AbstractOneOffElasticJobListener;
import com.dangdang.ddframe.job.lite.api.listener.ElasticJobListener;
import com.dangdang.ddframe.job.lite.api.listener.ShardingContexts;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import java.util.Collections;

@Configuration
public class JobConfig {

    @Autowired
    private ZookeeperRegistryCenter zookeeperRegistryCenter;

    @Bean
    public SimpleJob myJob() {
        return new MyJob();
    }

    @Bean(initMethod = "init")
    public JobScheduler simpleJobScheduler(final SimpleJob myJob, final ElasticJobListener elasticJobListener) {
        return new Spring

JobScheduler(myJob, zookeeperRegistryCenter,
                getLiteJobConfiguration(myJob.getClass(), "0/5 * * * * ?", 2), elasticJobListener);
    }

    private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass, final String cron,
                                                         final int shardingTotalCount) {
        return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(
                JobCoreConfiguration.newBuilder(jobClass.getName(), cron, shardingTotalCount).build(),
                jobClass.getCanonicalName())
        ).overwrite(true)
                .build();
    }

    @Bean
    public ElasticJobListener elasticJobListener() {
        return new AbstractOneOffElasticJobListener() {
            @Override
            public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
                System.out.println("Before job executed at last started.");
            }

            @Override
            public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
                System.out.println("After job executed at last completed.");
            }
        };
    }

}
  1. 配置Zookeeper:
    创建一个名为ZookeeperConfig.java的类,并添加以下代码:
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ZookeeperConfig {

    @Value("${zookeeper.serverList}")
    private String serverList;

    @Value("${zookeeper.namespace}")
    private String namespace;

    @Bean(initMethod = "init")
    public ZookeeperRegistryCenter zookeeperRegistryCenter() {
        return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
    }

}
  1. 配置Spring Boot:
    创建一个名为Application.java的类,并添加以下代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@Import({ZookeeperConfig.class, JobConfig.class})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
  1. 配置application.properties:
    application.properties文件中添加以下配置:
zookeeper.serverList=127.0.0.1:2181
zookeeper.namespace=my-job
  1. 运行应用程序:
    运行Application类的main方法,启动应用程序。

以上是使用Java代码实现Elastic-Job的入门示例。您可以根据自己的需求进行配置和扩展,以满足分布式任务调度的要求。请注意,示例中的代码仅供参考,您可以根据实际情况进行修改和调整。如需更多信息和示例代码,建议您查阅Elastic-Job的官方文档和示例项目。

标签:Elastic,Job,实践,job,dangdang,import,com
From: https://www.cnblogs.com/lukairui/p/17444197.html

相关文章

  • Quartz使用实践
    Quartz是一个开源的作业调度框架,它允许开发人员根据特定的时间规则来执行任务。Quartz提供了灵活的配置选项和丰富的功能,可以用于定时执行任务、定期重复任务、分布式任务调度等。下面是Quartz的介绍以及使用Java代码实现的入门示例:Quartz的介绍:Quartz是一个功能强大的作业调度......
  • ElasticSearch使用实例
    当涉及到Elasticsearch的入门实例时,以下是一个详细的示例,展示了如何使用Java高级REST客户端与Elasticsearch进行交互。准备工作:安装Elasticsearch:请按照Elasticsearch官方文档中的说明安装并启动Elasticsearch。添加依赖项:在您的项目的构建文件(例如pom.xml)中,添加Elasticsearc......
  • Elasticsearch专题精讲—— 操作文档 ——读写文档
     操作文档——读写文档1、Introductionhttps://www.elastic.co/guide/en/elasticsearch/reference/8.8/docs-replication.htmlEachindexinElasticsearchisdividedintoshardsandeachshardcanhavemultiplecopies.Thesecopiesareknown......
  • mysql索引损坏,Record in index `log_time` of table `lts`.`lts_job_log_po` was not
    【1】错误信息[ERROR][MY-012869][InnoDB]Recordinindex`log_time`oftable`lts`.`lts_job_log_po`wasnotfoundonupdate:TUPLE(info_bits=0,2n_cmp=2,fields)2023-05-29T23:03:05.146242Z193[ERROR][MY-013183][InnoDB]Assertionfailure:row0upd.cc:......
  • Elasticsearch专题精讲——API规范—— 基于 URL 的访问控制
    API规范——基于URL的访问控制https://www.elastic.co/guide/en/elasticsearch/reference/8.8/api-conventions.html#api-url-access-control Elasticsearch中的multi-search(多搜索)、multi-get(多获取)和bulk(批量请求)是在一个请求中执行多个操作的方法。如果使用基于URL......
  • 火山引擎DataLeap的Catalog系统搜索实践(一):背景与功能需求
    火山引擎DataLeap的DataCatalog系统通过汇总和组织各种元数据,解决了数据生产者梳理数据、数据消费者找数和理解数的业务场景,其中搜索是DataCatalog的主要功能之一。本文详细介绍了火山引擎DataLeap的Catalog系统搜索实践:功能的设计与实现。 DataCatalog能够帮助大公司更好......
  • Elasticsearch专题精讲——API规范—— 一般表达式
    API规范——一般表达式1、格式化搜索结果 当任何请求URL加pretty=true参数时,返回的JSON都是格式化的(仅用于调试)。另一个选项是设置format=yaml,结果以更可读的yaml格式返回。2、可读输出 统计数据以适合人(例如"exists_time":"1h"或"size":"1KB")和计算机(例如......
  • [更新中] [论文阅读 & 实践] 小样本下的GAN探究记(下)
    GAN的进一步探究书接上回,因为本人在GAN才刚入门,尽管直接调用别人的ACGAN得到的效果已经很棒,但是我还是想要继续看一下不同参数对于生成图像的影响,帮助自己去更好理解.学习率调节为了平衡D和G的过程,我们可以适当更改学习率.这个小trick甚至有个专门的名字叫TwoTime-......
  • Elasticsearch专题精讲——API规范——多索引
    API规范——多索引ElasticsearchRESTAPI使用HTTP协议,采用JOSN格式。 大多数API都支持跨多个索引执行,可以使用简单的test1,test2,test3表示法(或对所有索引执行,用_all)。它还支持通配符,例如test*或te*t或*test,以及排除(-),例如-test3. 所有多索引API都支持以......
  • 安全测试实践-万家APP越权逻辑漏洞挖掘
    逻辑漏洞会导致业务面临着巨大的经济损失隐患与敏感数据泄露的风险,本文从安全测试的角度,以越权逻辑漏洞为例,介绍逻辑漏洞的挖掘方法和实践过程。一、什么是越权逻辑漏洞定义:指由于系统的权限控制逻辑不够严谨,使得系统用户可以访问或操作未授权的数据和功能。包括水平越权和垂直......