如何使用Java客户端SDK列出所有运行中的GCP Dataflow作业?
使用Java客户端SDK列出运行中的Dataflow作业
完全可以通过Java客户端SDK列出GCP上运行中的Dataflow作业,你提到的JobsV1Beta3Client和listJobs方法是正确的方向,下面是具体的参数说明和完整代码示例:
核心参数说明
listJobs方法需要传入构建好的ListJobsRequest对象,关键参数包括:
- parent:指定要查询的项目和区域,格式为
projects/[你的项目ID]/locations/[区域],用-代替区域时表示查询所有区域的作业。 - filter:用来筛选特定状态的作业,针对运行中的场景,过滤条件设为
state=JOB_STATE_RUNNING即可;如果需要包含等待中的作业,可以写成state=JOB_STATE_RUNNING OR state=JOB_STATE_PENDING。
完整代码示例
import com.google.cloud.dataflow.v1beta3.Job; import com.google.cloud.dataflow.v1beta3.JobsV1Beta3Client; import com.google.cloud.dataflow.v1beta3.ListJobsRequest; import com.google.cloud.dataflow.v1beta3.ListJobsResponse; public class ListRunningDataflowJobs { public static void main(String[] args) throws Exception { // 替换为你的GCP项目ID String projectId = "your-project-id"; String parent = String.format("projects/%s/locations/-", projectId); try (JobsV1Beta3Client client = JobsV1Beta3Client.create()) { ListJobsRequest request = ListJobsRequest.newBuilder() .setParent(parent) .setFilter("state=JOB_STATE_RUNNING") .build(); ListJobsResponse response = client.listJobs(request); // 遍历输出运行中的作业信息 for (Job job : response.getJobsList()) { System.out.printf("作业ID: %s, 名称: %s, 当前状态: %s%n", job.getId(), job.getName(), job.getState()); } } } }
注意事项
- 确保你的应用已配置GCP认证(比如设置
GOOGLE_APPLICATION_CREDENTIALS环境变量指向服务账号密钥文件),否则客户端无法正常访问Dataflow服务。 - 如果只需要查询特定区域的作业,把
parent中的-替换为具体区域(如us-central1)即可。
内容的提问来源于stack exchange,提问作者user8473984
相关产品推荐
相关产品推荐

