前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >micro-job分布式任务调度框架更新

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

作者头像
恒宇少年
发布2019-03-06 16:43:03
6270
发布2019-03-06 16:43:03
举报
文章被收录于专栏:SpringBoot 核心技术

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

详细开发文档 访问官网

名词解释: consumer -> 任务消费节点 schedule -> 任务调度器 provider -> 任务生产者 registry -> 任务注册中心

任务注册中心(registry)

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

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

代码语言:javascript
复制
<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-registry-memory</artifactId>
    <version>{lastVersion}</version>
</dependency>

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

代码语言:javascript
复制
server:
   port: 9000
hengboy:
  job:
    registry:
      # 任务注册中心节点注册方式
      away: memory

任务调度器(schedule)

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

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

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

代码语言:javascript
复制
<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-schedule</artifactId>
    <version>{lastVersion}</version>
</dependency>

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

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

任务消费节点(consumer)

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

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

代码语言:javascript
复制
<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-consumer</artifactId>
    <version>{lastVersion}</version>
</dependency>

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

代码语言:javascript
复制
server:
   port: 8082
hengboy:
  job:
    registry:
      # 保持与任务注册中心节点注册方式一致即可
      away: memory

任务定义示例

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

代码语言:javascript
复制
@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文件内。

代码语言:javascript
复制
<dependency>
    <groupId>com.github.hengboy</groupId>
    <artifactId>spring-boot-starter-provider</artifactId>
    <version>{lastVersion}</version>
</dependency>

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

代码语言:javascript
复制
server:
  port: 8083
hengboy:
  job:
    registry:
      # 保持与任务注册中心节点注册方式一致即可
      away: memory

任务执行示例

代码语言:javascript
复制
@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

代码语言:javascript
复制
​```
.
├── 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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.02.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 任务注册中心(registry)
  • 任务调度器(schedule)
  • 任务消费节点(consumer)
    • 任务定义示例
    • 任务生产节点(provider)
      • 任务执行示例
      • 测试流程
      • Folders
      • License
      相关产品与服务
      微服务引擎 TSE
      微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档