Google cloud dataflow 是否在配置的时间后以编程方式终止订阅中的PubSubIO.readMessages?

Google cloud dataflow 是否在配置的时间后以编程方式终止订阅中的PubSubIO.readMessages?,google-cloud-dataflow,apache-beam,google-cloud-pubsub,dataflow,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,Dataflow,我正在计划从PubSub主题的subscripton中获取PubSubIO.readString的数据流。如何使作业在配置的间隔后终止?我的用例不是让作业一整天都在运行,所以我希望计划从作业中开始,然后在配置的间隔后停止 Pipeline .apply(PubsubIO.readMessages().fromSubscription("some-subscription")) 发件人: 如果需要停止正在运行的云数据流作业,可以通过 使用云数据流监控接口发出命令 或云数据流命令行界面 我

我正在计划从PubSub主题的subscripton中获取PubSubIO.readString的数据流。如何使作业在配置的间隔后终止?我的用例不是让作业一整天都在运行,所以我希望计划从作业中开始,然后在配置的间隔后停止

Pipeline
    .apply(PubsubIO.readMessages().fromSubscription("some-subscription"))
发件人:

如果需要停止正在运行的云数据流作业,可以通过 使用云数据流监控接口发出命令 或云数据流命令行界面

我假设您对通过控制台手动停止作业不感兴趣,这样您就可以使用命令行解决方案了。如果您打算将数据流作业安排为每天运行,那么您也知道希望它在什么时候停止(启动时间+配置间隔)。在这种情况下,您可以将cron作业配置为每天在该时间运行。例如,以下脚本将取消当天启动的所有活动作业:

#!/bin/bash
gcloud dataflow jobs list --status=active --created-after=-1d \
| awk '{print $1;}' | tail -n +2 \
| while read -r JOB_ID; do gcloud dataflow jobs cancel $JOB_ID; done
另一个解决方案是在java代码中使用调用
gcloud
命令。如前所述,您可以使用
java.util.Timer().schedule()
将其安排在特定的时间间隔后运行。通过这种方式,无论何时启动作业,都可以确保作业在规定的时间间隔后停止

更新


@RoshanFernando在评论中正确地指出,实际上,取消管道是有必要的

你能和我分享一些在java代码中调用gcloud命令的例子吗?我还找到了使用内置管道作业API以编程方式调用cancel/drain的选项。再次感谢。