获得管道结果的正确方法是什么?

What is the correct way to get the result of Pipeline?

我处理管道结果的代码如下所示(为简洁起见,一些代码被剪掉了):

PipelineResult result = pipeline.run();
switch (result.getState()) {
      case DONE: {
        handleDone();
        break;
      }
      case FAILED: {
        handleFailed();
        break;
      }
      case CANCELLED: {
        handleCancelled();
        break;   
      }
      case UNKNOWN:
      case RUNNING:
      case STOPPED: {
        handleUnknownRunningStopped();
        break;      
      }
      default: {
        assert false;
        throw new IllegalStateException();
     }
}

但是,我注意到,例如,没有返回枚举 PipelineResult.State 的值FAILEDCANCELLED,抛出异常:

  1. 对于失败的作业,抛出 DataflowJobExecutionException
  2. 对于取消的作业,抛出 DataflowJobCancelledException

处理管道结果的正确方法(以编程方式)是什么?

两个 DataflowPipelineRunners return PipelineResult 允许您查询管道的当前状态。 DataflowPipelineRunner return 在作业提交后立即生成 PipelineResult,但 BlockingDataflowPipelineRunner 在作业完成之前不会 return 它。

此外,如果作业未成功完成,BlockingDataflowPipeline 运行ner 会抛出异常——因为您指定了阻塞 运行(),我们假设您想知道是否出问题了。因此,如果您对 Blocking Runner 进行了硬编码,那么依赖异常是处理失败的一种简单方法。

请注意,您编写的代码片段使用了更通用的 PipelineResult 选项,但不适用于非阻塞 运行ner,因为这将 return还是运行宁.