marco de programación distribuido de trabajos elásticos

Un marco de trabajo elástico

Desarrollado en base al framework Quartz y zooepper.

Principalmente resuelve el problema de que los trabajos del clúster se ejecutarán varias veces y el clúster no puede escalar los trabajos horizontalmente (problema de eficiencia de ejecución). Las características son las siguientes:

  • Coordinación de programación distribuida (proporcionada por el cuidador del zoológico)
  • Expansión y contracción flexible
  • Conmutación por error (cuando un nodo falla, otros nodos se harán cargo de la ejecución del trabajo)
  • Reactivación del trabajo perdido
  • Coherencia de los fragmentos de trabajo, para garantizar que el mismo fragmento se ejecute en una sola instancia en un entorno distribuido (no se producirán varias ejecuciones)
  • Tipos de trabajo enriquecidos (simple, flujo de datos)
  • Provisión de espacio de nombres y integración de Spring (SpringJobScheduler)
  • Proporcionar plataforma de operación y mantenimiento (elastic-job-lite-console)

 

2. ¿Cómo utilizar el trabajo elástico?

Necesito comenzar con el cuidador del zoológico primero,

1. Introducir dependencias

        <dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-spring</artifactId>
            <version>2.1.5</version>
        </dependency>

2. Dos formas de crear clases de trabajo:

2.1 Crear una clase de trabajo para implementar la interfaz SimpleJob (tarea de trabajo simple)

Características:

public class MySimpleJob implements SimpleJob {
    @Override
    public void execute(ShardingContext shardingContext) {
        int shardingItem = shardingContext.getShardingItem();//当前分片项
        String jobParameter = shardingContext.getJobParameter();//当前分片自定义的参数,例如按照类型分片(txt、jpg、pdf等)
        //这里可以根据分片的信息,去数据查询对应的数据,进行处理
        //例如按照id奇偶数去分片。或按照类型等字段分片处理数据,提高性能
        System.out.println(new Date()+":"+JSON.toJSONString(shardingContext));
    }
}

2.2 o implementar la interfaz DataFlowJob (tarea de trabajo de flujo de datos)

Características:

public class MyDateFlowJob implements DataflowJob<Object> {
    @Override
    public List<Object> fetchData(ShardingContext shardingContext) {
        //当返回有数据时,则执行下边的processData方法,一直到没有数据返回(执行完了),本次作业完毕
        //等待进入下一次作业
        return null;
    }

    @Override
    public void processData(ShardingContext shardingContext, List<Object> data) {
        System.out.println(new Date()+"处理数据");
    }
}

3. Cree una clase de configuración

Cada paso está claramente escrito en el código.

@Configuration
public class ElasticJobConfig {
    @Bean
    public SpringJobScheduler dataFlowJobScheduler(DataSource dataSource){
        //1、创建zookeeper配置(zookeeper地址,命名空间)
        ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration("localhost:2181", "elastic-job");

        //2、创建zookeeper配置中心,并初始化(根据zookeeper配置创建)
        ZookeeperRegistryCenter zookeeperRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
        zookeeperRegistryCenter.init();

        //3、创建作业配置(作业名称、cron表达式、分片数量)
        JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder("myDataflowJob", "0/30 * * * * ?", 5)
                .jobParameter("this jobParameter")//作业参数
                .description("这个作业是干什么的?描述一下")//作业描述
                .failover(true)//开始失效转移。当某节点挂掉之后,作业会分配到其他节点继续完成
                .shardingItemParameters("0=txt,1=jpg,2=pdf,3=word,4=excel")//分片附带的参数
                .build();

        //4、创建数据流作业配置(根据作业配置、实现了DataflowJob实现类的全限定名、是否流式处理创建)
        DataflowJobConfiguration dataflowJobConfiguration = new DataflowJobConfiguration(jobCoreConfiguration, MyDateFlowJob.class.getCanonicalName(),true);

        //5、创建精简版作业配置(根据简单作业配置创建)
        LiteJobConfiguration liteJobConfiguration = LiteJobConfiguration.newBuilder(dataflowJobConfiguration)
                .jobShardingStrategyClass("com.dangdang.ddframe.job.lite.api.strategy.impl.RotateServerByNameJobShardingStrategy")//配置作业分片策略类
                //默认elastic-job提供了三种分片策略:
                //1、AverageAllocationJobShardingStrategy 平均分配策略(默认)
                //2、OdevitySortByNameJobShardingStrategy 根据作业名hash值奇偶数升降ip分配策略
                //3、RotateServerByNameJobShardingStrategy 根据作业名hash值对服务器列表轮转分配策略
                //你还可以自定义分配策略实现JobShardingStrategy接口
                .overwrite(true)//覆盖注册中心配置。如果不覆盖,一次注册后,配置便再也不能改变了。
                .monitorPort(8889)//作业辅助监控端口。当生产环境不能连接作业监控时,可通过此端口导出日志查看。
                .build();

        //6、创建作业事件配置(可选)(根据数据源创建)
        //作用:把作业的执行过程写入数据库表中
        JobEventConfiguration jobEventConfiguration = new JobEventRdbConfiguration(dataSource);

        //7、创建Elastic监听器(可选)
        //作用:可以在作业执行的前后做某些操作
        MyDistributeOnceElasticJobListener listener = new MyDistributeOnceElasticJobListener(0,0);

        //8、创建spring作业定时器,并初始化(根据作业类的实例、zookeeper注册中心、精简版作业配置、[作业事件配置]、[elastic监听器])
        //作用:正式创建作业
        SpringJobScheduler springJobScheduler = new SpringJobScheduler(new MyDateFlowJob(), zookeeperRegistryCenter, liteJobConfiguration, jobEventConfiguration, listener);
        springJobScheduler.init();
        return springJobScheduler;
    }
}

4. Configure el oyente de trabajo elástico (se llamará al método en el oyente cada vez que se ejecute el trabajo) (opcional)

public class MyDistributeOnceElasticJobListener extends AbstractDistributeOnceElasticJobListener {

    public MyDistributeOnceElasticJobListener(long startedTimeoutMilliseconds, long completedTimeoutMilliseconds) {
        super(startedTimeoutMilliseconds, completedTimeoutMilliseconds);
    }

    @Override
    public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
        System.out.println("监听器--执行之前执行的方法");
    }

    @Override
    public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
        System.out.println("监听器--执行之后执行的方法");
    }
}

 

 

3. ¿Cómo utilizar la consola de visualización de trabajos elásticos?

1. Descarga el proyecto: https://github.com/apache/shardingsphere-elasticjob/tree/2.1.5/elastic-job-lite , la descarga está completa y descomprimida

2. El paquete Maven empaqueta el proyecto elastic-job-lite-console , y luego hay un archivo elastic-job-lite-console-2.1.5.tar.gz en el directorio de destino

3. Descomprima el archivo elastic-job-lite-console-2.1.5.tar.gz, ingrese al directorio bin y ejecute start.sh para comenzar

4. Visite http: // localhost: 8899 / . Contraseña de la cuenta: root / root

Entra en la consola

1. Configuración global, agregue información del cuidador del zoológico e información de mysql

2. Operación del trabajo: puede ver la información del trabajo y la información del servidor

3. Historial de trabajos: puede ver la ejecución del trabajo.

 

4. ¿Cómo utilizar el puerto auxiliar de operación 8889?

Cuando no se puede utilizar zookeeper en el entorno de producción, podemos exportar el estado de ejecución del trabajo a través del puerto auxiliar del trabajo para facilitar la depuración.

1. El puerto auxiliar del trabajo debe abrirse en la configuración de LiteJobConfiguration.

2. Necesita usar el comando dump y el comando nc, no es necesario instalar

3. Ejecute el comando echo dump | nc 127.0.0.1 9888> job_debug_dump.txt

 

Supongo que te gusta

Origin blog.csdn.net/sumengnan/article/details/114438556
Recomendado
Clasificación