micro-job

分布式任务调度框架
授权协议 Apache
开发语言 Java
所属分类 程序开发、 作业/任务调度
软件类型 开源软件
地区 国产
投 递 者 谷梁承宣
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

快速开始

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单元测试方法
  • micro-job是一款分布式任务调度执行框架,内部通过各个组件的Jersey共享出的Rest路径进行数据访问。 详细开发文档 访问官网 名词解释: consumer -> 任务消费节点 schedule -> 任务调度器 provider -> 任务生产者 registry -> 任务注册中心 任务注册中心(registry) registry是任务注册中心,在整个生态圈内担任着各个组件注册节点

  • 源码位置: GitHub:https://github.com/hengyuboy/spring-boot-starter-micro-job 码云:https://gitee.com/hengboy/spring-boot-starter-micro-job 基本介绍 micro-job是一款轻量级的分布式任务执行框架,内部集成了quartz框架来完成任务的分布式调度,quartz是一个强大的任

  • 代写Inf2A留学生作业、代做Micro-Haskell作业、代做Java课程设计作业、代写Java程序作业 Inf2A 2018–19: Assignment 1 The Language Processing Pipeline for Micro-Haskell Issued 12 October 2018 The deadline for this assignment is 4pm, Tu

  • 1、概述 Docker是一种Linux容器工具集,它是为构建(Build)、交付(Ship)和运行(Run)分布式应用而设计的。 Kubernates:是开源的容器集群管理系统。它构建在Docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等一套功能,本质上可看作是基于容器技术的Micro-PaaS平台。 即第三代PaaS的代表性项目。 K8S的核心概念: Kubernet

  • 基于 go-micro 实现聊天服 github 上有个 goim ,主要是为弹幕服做的,改成聊天服也有些工作量 将 goim 实现弹幕的思路,与 go-micro 结合,应该能达成快速开发聊天服,且足够应对主业务不是聊天为主的应用 细节如下: 1. 账号登录聊天服 +----------------+ +----------------+

 相关资料
  • 简介 在过去,开发者必须在服务器上为每个任务生成单独的 Cron 项目。而令人头疼的是任务调度不受源代码控制,而且必须通过 SSH 连接到服务器上来增加 Cron 项目。 Laravel 的命令调度程序允许你在 Laravel 中对命令调度进行清晰流畅的定义。并且在使用调度程序时,只需要在服务器上增加一条 Cron 项目即可。调度是在 app/Console/Kernel.php 文件的 sche

  • 基本任务调度 方案1: 通过 @Cron 注解,这个需要依赖 cron4j 框架: //1分钟执行一次 @Cron("*/1 * * * *") public class MyTask implements Runnable { @Override public void run() { System.out.println("task running...");

  • 我刚刚更新了 Play!框架到版本 2.1 和 scala 到版本 2.10... 现在我的游戏!应用程序已损坏。似乎Akka API已经发生了变化。我找不到现在使用的阿卡版本,但我认为这是最后一个版本...... 我刚刚阅读了迁移指南:http://doc.akka.io/docs/akka/2.1.0/project/migration-guide-2.0.x-2.1.x.html。 我相应地

  • 在这最后一章中,我们将回到:kv应用程序,给它添加一个路由层,使之可以根据桶的名字,在各个节点间分发请求。 路由层会接收一个如下形式的路由表: [{?a..?m, :"foo@computer-name"}, {?n..?z, :"bar@computer-name"}] 路由者(负责转发请求的角色,可能是个节点)将根据桶名字的第一个字节查这个路由表, 然后根据路由表所示将用户对桶的请求发给相应

  • 每隔一段时间需要调度任务执行,也许你想注册一个任务在客户端完成连接5分钟后执行,一个常见的用例是发送一个消息“你还活着?”到远端通,如果远端没有反应,则可以关闭通道(连接)和释放资源。 本节介绍使用强大的 EventLoop 实现任务调度,还会简单介绍 Java API的任务调度,以方便和 Netty 比较加深理解。 使用普通的 Java API 调度任务 在 Java 中使用 JDK 提供的 S

  • 我有两个微服务。Item micro服务将数据填充到redis缓存中。这是成功的,我也能够在同一个微服务中检索数据。另一个微服务是订单服务。为了获得服务,我需要从redis缓存中获取项目服务数据,因为我需要使用分布式缓存。然而,我无法从redis缓存中访问缓存数据以获得服务。 这是我的实现代码 物品服务 重新配置。JAVA 重新发行。JAVA 订单服务 重新配置。JAVA 我在订单服务中创建了It