在配置时间后以编程方式终止订阅中的 PubSubIO.readMessages?
Posted
技术标签:
【中文标题】在配置时间后以编程方式终止订阅中的 PubSubIO.readMessages?【英文标题】:Programmatically terminating PubSubIO.readMessages from Subscription after configured time? 【发布时间】:2019-01-12 10:58:51 【问题描述】:我希望从 PubSub 主题的订阅中安排具有 PubSubIO.readString 的数据流。我怎样才能让工作在配置的时间间隔后终止?我的用例不是让作业运行一整天,因此希望安排开始,然后在作业中配置的间隔后停止。
Pipeline
.apply(PubsubIO.readMessages().fromSubscription("some-subscription"))
【问题讨论】:
【参考方案1】:来自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
命令。您可以使用java.util.Timer().schedule()
安排它在特定时间间隔后运行,如here 所述。这样,无论您何时启动,您都可以确保您的作业在提供的时间间隔后停止。
更新
@RoshanFernando 在 cmets 中正确指出实际上有一个 SDK method 来取消管道。
【讨论】:
你能分享一些在java代码中调用gcloud命令的例子吗? 我还找到了使用其内置管道作业 API 以编程方式调用取消/排水的选项。再次感谢。以上是关于在配置时间后以编程方式终止订阅中的 PubSubIO.readMessages?的主要内容,如果未能解决你的问题,请参考以下文章
如何在设备旋转后以编程方式创建的 UIButtons 保持在屏幕底部?
获取 json 数据后以编程方式设置 UITableViewCell 高度