不要 return 运行 管道后的结果响应(结果失败)

don't return the result response after running pipeline (result is fail)

1) 当管道 运行 结果成功并完成时,我捕获响应 (DONE)。并在控制台上打印 "Pipiline running result = DONE"。

2) 当管道 运行 结果失败时,我没有捕捉到响应 (FAILED),它只是完成了。它不打印 "Pipiline running result = FAILED"。我不能进行下一步。我试过使用 try/catch,但它没有捕捉到 'PipelineExecutionException'。

    pipeline
        .apply(TextIO.Read.from(Path).named("TextIO.Read(" + Path + ")"))
        .apply(new MyTransforms());

    try{
        PipelineResult result = pipeline.run();

        LOG.info("  Pipiline running result = " + result.getState().toString());

        if (result.getState() != PipelineResult.State.DONE) {
            // i will send e-mail
        }
    }
    catch(PipelineExecutionException e){
        LOG.error(e.getMessage());
    }

失败的原因是"path(gcs) is empty"。 我想获得失败结果响应。

首先,确保您使用的是 BlockingDataflowPipelineRunner。否则,您的代码将在作业提交后终止。

使用 BlockingDataflowPipelineRunner,您应该捕捉 DataflowJobExecutionException 来处理意外失败,捕捉 DataflowJobCancelledException 来处理取消,或者捕捉超类 DataflowJobException 来处理所有可能的非成功终止。

只有在作业成功时才会返回 PipelineResult。如果您想在失败的情况下查询作业的属性,例如状态或聚合器,您可以从使用 DataflowJobException#getJob() 捕获的异常中访问 DataflowPipelineJob 对象。