Schedulerx2.0分布式执行之——广播执行-阿里云开发者社区

开发者社区> 阿里分布式任务调度> 正文

Schedulerx2.0分布式执行之——广播执行

简介: 1. 简介 广播执行表示一个任务实例会广播到该分组所有worker上执行,当所有机器都执行完成,该实例才算完成。 任意一台worker执行失败,都算该实例失败。 所有worker执行成功,才算该实例成功。

1. 简介

广播执行表示一个任务实例会广播到该分组所有worker上执行,当所有机器都执行完成,该实例才算完成。

任意一台worker执行失败,都算该实例失败。

所有worker执行成功,才算该实例成功。

有子任务列表,可以看每台机器的执行详情。

2. 执行方式

执行方式选择广播

3. 任务类型

任务类型可以选择多种,比如脚本,或者java任务。如果选择java,还支持preProcess和postProcess高级特性。

使用java任务需要继承JavaProcessor(1.0.8+版本),接口如下:

public ProcessResult process(JobContext context) throws Exception; (必选)
public void preProcess(JobContext context); (可选)
public ProcessResult postProcess(JobContext context); (可选)
  • preProcess会在所有机器执行process之前执行,只会执行一次。
  • postProcess会在所有机器执行process之后且都成功执行,之后执行一次,可以返回结果,作为工作流数据传输。

4. 应用场景

4.1 批量运维

  • 定时广播所有机器运行某个脚本。
  • 定时广播所有机器清理缓存。

4.2 数据聚合

1)使用BroadcastJavaProcessor,preProcess的时候重置数据库count=0;
2)每台机器执行process的时候,根据自己机器内存或者日志的值,往数据库count叠加;
3)postProcess的时候,读取数据库count值,传给下游;

5. Demo

@Component
public class TestBroadcastJobProcessor extends JavaProcessor {

    @Override
    public ProcessResult process(JobContext context) throws Exception {
        System.out.println("this is process");
        return new ProcessResult(true);
    }

    @Override
    public void preProcess(JobContext context) {
        System.out.println("this is preProcess");
    }

    @Override
    public ProcessResult postProcess(JobContext context) {
        System.out.println("this is postProcess");
        return new ProcessResult(true, "hello broadcast");
    }
}

如上代码所示,起三台机器,执行结果如下:
worker1:

this is preProcess
this is process
this is postProcess

worker2:

this is process

worker3:

this is process

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
官网链接