在配置的时间后以编程方式终止Subscription的PubSubIO.readMessages吗?

时间:2018-08-05 04:39:51

标签: google-cloud-dataflow apache-beam google-cloud-pubsub dataflow

我正在计划从PubSub主题的下标中安排具有PubSubIO.readString的数据流。在配置的间隔后如何终止工作?我的用例不是要使该工作持续一整天,因此希望排定开始的时间,然后在配置的间隔后从该工作中停止。

Pipeline
    .apply(PubsubIO.readMessages().fromSubscription("some-subscription"))

1 个答案:

答案 0 :(得分:2)

来自docs

  

如果您需要停止正在运行的Cloud Dataflow作业,可以通过以下方式停止   使用Cloud Dataflow监控界面发出命令   或Cloud Dataflow命令行界面。

我认为您对通过控制台手动停止作业不感兴趣,因此可以使用命令行解决方案。如果您打算安排数据流作业运行,例如每天,那么您也知道要在哪个时间停止(启动时间+“配置的间隔”)。在这种情况下,您可以将cron作业配置为每天的gcloud dataflow jobs cancel运行。例如,以下脚本将取消当天已启动的所有活动作业:

#!/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

另一种解决方案是使用Runtime.getRuntime.exec()在Java代码中调用gcloud命令。您可以按照here的规定,使用java.util.Timer().schedule()将其安排为在特定间隔后运行。这样,无论您何时启动作业,都可以确保在指定的时间间隔后作业将停止。

更新

@RoshanFernando在注释中正确地指出,实际上有一个SDK method要取消管道。