我正在尝试从Java Data Pipeline客户端访问数据管道的当前状态。我的用例是激活管道并等待其完成。 我尝试了以下线程的答案:AWS Data Pipeline - Components, Instances and Attempts and Pipeline Status,但是即使管道处于运行状态,我也只能按计划获得当前状态。这是我的代码段:
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年运行的触发管道。我们需要手动触发该管道。
答案 0 :(得分: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...
您当前正在做的事情是获取管道信息,该信息只会显示已成功创建并已计划。
我们需要手动触发此管道。
为此,请再次激活管道。这将创建数据管道将开始处理的新任务对象。目前,如上所述,这是一个按需管道,仅在手动激活时才创建新任务。