0

我正在尝试从 Java 数据管道客户端访问数据管道的当前状态。我的用例是激活管道并等待它处于完成状态。我尝试了该线程的答案:AWS Data Pipeline - Components, Instances and Attempts 和 Pipeline Status,但即使管道处于运行状态,我也只能将当前状态设置为 Scheduled。这是我的代码片段:

DescribePipelinesRequest describePipelinesRequest = new DescribePipelinesRequest();
    describePipelinesRequest.setPipelineIds(Arrays.asList(pipelineId));
    final DescribePipelinesResult describePipelinesResult =
        dataPipelineClient.describePipelines(describePipelinesRequest);
    final List<Field> testPipeline =
        describePipelinesResult.getPipelineDescriptionList().get(0).getFields();
    for (Field field : testPipeline) {
      log.debug("Field: {} and {}", field.getKey(), field.getStringValue());
      if (field.getKey().equals("@pipelineState")) {
        log.debug("Pipeline state current: {} and {}", field.getStringValue());
      }
    }

以前有人遇到过这样的问题吗?顺便说一句,这条管道已经成为一个触发管道,计划每 100 年运行一次。我们需要手动触发这个管道。

4

1 回答 1

1

我不确定这是否完全符合您的要求,但应该有助于为您指明正确的方向。您需要查询管道中的对象并获取它们的状态。这些是实际运行的。

Java 代码

String pipelineid = "df-06036888777666777";//replace with your pipeline id
DataPipelineClient client = new DataPipelineClient();
QueryObjectsResult tasks = client.queryObjects( new QueryObjectsRequest().withPipelineId(pipelineid).withSphere("INSTANCE"));
DescribeObjectsResult results = client.describeObjects(new DescribeObjectsRequest().withObjectIds(tasks.getIds()).withPipelineId(pipelineid));

for (PipelineObject obj : results.getPipelineObjects()){
    for (Field field : obj.getFields()){
        if (field.getKey().equals("@status") && !field.getStringValue().equals("FINISHED") ){
            System.out.println(obj.getName() + " is still running...");
        }
    }
}

输出

@CliActivity_2020-01-11T21:34:45 is still running...
@Ec2Instance_2020-01-11T21:34:45 is still running...

您目前正在做的是获取管道信息,这些信息只会显示它已成功创建并已安排好。

我们需要手动触发这个管道。

为此,请再次激活管道。这将创建数据管道将开始处理的新任务对象。目前如上所述,这是一个按需管道,仅在手动激活时才会创建新任务。

于 2020-01-11T21:37:51.637 回答