micro-job分布式任务调度框架更新

作者: 恒宇少年 | 来源:发表于2019-02-22 17:34 被阅读81次

micro-job是一款分布式任务调度执行框架,内部通过各个组件的Jersey共享出的Rest路径进行数据访问。

详细开发文档 访问官网

名词解释:

consumer -> 任务消费节点

schedule -> 任务调度器

provider -> 任务生产者

registry -> 任务注册中心

任务注册中心(registry)

registry是任务注册中心,在整个生态圈内担任着各个组件注册节点的任务,任务注册中心实现方式是多样化的,目前包含:memoryzookeeperredisconsul等。

通过idea、eclipse工具创建SpringBoot项目并添加如下依赖到pom.xml文件内。

<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-registry-memory</artifactId>
    <version>{lastVersion}</version>
</dependency>

resources资源目录下添加application.yml配置文件,配置内容如下所示:

server:
   port: 9000
hengboy:
  job:
    registry:
      # 任务注册中心节点注册方式
      away: memory

任务调度器(schedule)

schedule是任务调度器,每一个任务的创建都是通过调度器进行分配执行,分配过程中根据消费节点的负载均衡策略配置进行不同消费者节点任务消费。

在生产任务时,也会根据调度器的负载均衡策略来进行筛选执行任务调度的调度器节点

通过idea、eclipse工具创建SpringBoot项目并添加如下依赖到pom.xml文件内。

<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-schedule</artifactId>
    <version>{lastVersion}</version>
</dependency>

resources资源目录下添加application.yml配置文件,配置内容如下所示:

server:
   port: 8081
hengboy:
  job:
    registry:
      # 保持与任务注册中心节点注册方式一致即可
      away: memory
    schedule:
      # 内存方式调度器处理任务队列以及任务日志的存储
      job-store-type: memory  

任务消费节点(consumer)

consumer是任务消费者执行节点,任务由consumer进行定义以及上报,当schedule调用消费者执行任务请求时,会自动根据jobKey来执行对应的任务逻辑方法。

通过idea、eclipse工具创建SpringBoot项目并添加如下依赖到pom.xml文件内。

<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-consumer</artifactId>
    <version>{lastVersion}</version>
</dependency>

resources资源目录下添加application.yml配置文件,配置内容如下所示:

server:
   port: 8082
hengboy:
  job:
    registry:
      # 保持与任务注册中心节点注册方式一致即可
      away: memory

任务定义示例

我们来定义一个简单的Job,示例如下所示:

@Job(jobExecuteAway = JobExecuteAwayEnum.ONCE)
public class TestJob implements MicroJob {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(TestJob.class);

    @Override
    public JobExecuteResult execute(JobExecuteParam jobExecuteParam) throws JobException {
        logger.info("执行Key:{},执行参数:{}", jobExecuteParam.getJobKey(), jobExecuteParam.getJsonParam());
        return JobExecuteResult.JOB_EXECUTE_SUCCESS;
    }
}

在上面定义的Job对应的JobKeytestJob.

任务生产节点(provider)

provider是任务生产节点,由业务方进行添加依赖并执行MicroJobProvider.newXxxJob调用创建任务,如:创建订单后执行发送邮件通知操作。

通过idea、eclipse工具创建SpringBoot项目并添加如下依赖到pom.xml文件内。

<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-provider</artifactId>
    <version>{lastVersion}</version>
</dependency>

resources资源目录下添加application.yml配置文件,配置内容如下所示:

server:
  port: 8083
hengboy:
  job:
    registry:
      # 保持与任务注册中心节点注册方式一致即可
      away: memory

任务执行示例

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProviderTester {
    /**
     * 注册任务提供者
     */
    @Autowired
    private MicroJobProvider microJobProvider;

    @Test
    public void newJob() {
        // 创建的任务仅执行一次
        microJobProvider.newOnceJob(OnceJobWrapper.Context()
                // 对应consumer内定义任务的jobKey,默认为类名首字母小写
                .jobKey("testJob")
                // 自定义的任务队列key,可以准确定位任务并操作暂停、删除等操作
                .jobQueueKey(UUID.randomUUID().toString())
                // 参数,任意类型参数,consumer消费时会转换为json字符串
                .param(new HashMap() {
                    {
                        put("name", "admin");
                    }
                })
                .wrapper());
    }
}

测试流程

  1. 启动任务注册中心
  2. 启动任务调度中心
  3. 启动任务消费者节点
  4. 执行ProviderTester#newJob单元测试方法

Folders

​```
.
├── micro-job-autoconfigure
├── micro-job-dependencies
├── micro-job-samples
│   ├── sample-consumer
│   ├── sample-provider
│   ├── sample-registry-consul
│   ├── sample-registry-memory
│   ├── sample-registry-redis
│   ├── sample-registry-zookeeper
│   ├── sample-schedule
│   ├── pom.xml
│   └── README.md
├── micro-job-starters
│   ├── spring-boot-starter
│   ├── spring-boot-starter-provider
│   ├── spring-boot-starter-registry-consul
│   ├── spring-boot-starter-registry-memory
│   ├── spring-boot-starter-registry-redis
│   ├── spring-boot-starter-registry-zookeeper
│   ├── spring-boot-starter-schedule
│   └── pom.xml
├── .travis.yml
├── LICENSE
├── pom.xml
└── README.md
​```

License

The Apache License

相关文章

  • micro-job分布式任务调度框架更新

    micro-job是一款分布式任务调度执行框架,内部通过各个组件的Jersey共享出的Rest路径进行数据访问。 ...

  • 实战_资讯推荐场景中多路召回实践01

    召回服务框架 任务调度平台 主流的任务调度框架airflow airflow是一款开源的,分布式任务调度框架,它将...

  • 思考--xxl-job简单的记录

    为何选择xxl-job这个任务调度框架? xxl-job 首先采用分布式任务调度框架,可以进行分布式部署, xxl...

  • 分布式任务调度平台XXL-JOB

    《分布式任务调度平台XXL-JOB》 一、简介 1.1 概述 XXL-JOB是一个轻量级分布式任务调度框架,其核心...

  • Java任务调度框架之分布式调度框架XXL-Job介绍

    ​ Java任务调度框架之分布式调度框架XXL-Job介绍及快速入门 调度器使用场景: Java开发中经常会使用到...

  • 分布式任务调度-xxl-job

    前言 为什么要使用分布式任务调度框架? 使用原因和解决问题是为了解决: 实现定时调度任务 将定时任务分布式部署 提...

  • ElasticJob分片机制

    ElasticJob是一个弹性的分布式任务调度框架,这里的分布式就是采用分片的来进行任务调度和业务执行的解耦,分片...

  • 对分布式任务调度的理解

    1.什么是分布式任务调度 分布式任务调度就是在分布式环境下,定时任务的管理与执行 2.分布式任务调度的特性 分布式...

  • 分布式任务调度 SchedulerX

    参考文档: 为应用实现任务调度(EDAS 部署) 什么是分布式任务调度SchedulerX?分布式任务调度Sche...

  • Hadoop三大组件

    hadoop三大组件 mapreduce 分布式运算框架 yarn 任务调度平台 hdfs 分布式文件系统 1.H...

网友评论

    本文标题:micro-job分布式任务调度框架更新

    本文链接:https://www.haomeiwen.com/subject/ebaeyqtx.html