广播执行表示一个任务实例会广播到该分组所有 Worker 上执行,当所有 Worker 都执行完成,该任务才算完成。任意一台 Worker 执行失败,都算该任务失败。

应用场景

  • 批量运维
    • 定时广播所有机器运行某个脚本。
    • 定时广播所有机器清理缓存。
  • 数据聚合
    • 使用 JavaProcessor,preProcess 的时候重置数据库 count=0。
    • 每台机器执行 process 的时候,根据自己机器内存或者日志的值,在数据库对 count 进行叠加。
    • postProcess 的时候,读取数据库 count 值,传递给下游。

任务类型

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

使用 Java 任务需要继承 JavaProcessor(1.0.7 及以上版本),接口如下:

  • public ProcessResult process(JobContext context) throws Exception
  • public void preProcess(JobContext context) 
  • public ProcessResult postProcess(JobContext context)

preProcess 会在所有机器执行 process 之前执行,且只会执行一次。

postProcess 会在所有机器执行 process 且都成功执行之后执行一次,可以返回结果,作为工作流数据传输。

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");
    }

}

如以上代码所示,启动三台机器,执行结果如下:

  • Worker 1
    this is preProcess
    this is process
    this is postProcess
  • Worker 2
    this is process
  • Worker 3
    this is process