我已经为使用ffmpeg的媒体文件编码设置了一个批处理服务。每个作业可以包含多个任务,每个任务将编码一个文件。我使用特定于任务的资源和输出文件系统,因此批处理服务会自动从blob存储中获取文件并将文件传递到blob存储。
但是:我怎么知道工作或任务已经完成或失败?由于这项工作可能需要很长时间——在低优先级节点上更是如此——我需要某种webhook或事件。对作业状态进行连续轮询是不可行的。
我能想到的选择:
- 运行ffmpeg命令后,连接一个curl命令。类似于:
"命令行":"bin/bash-c";ffmpeg-i inputFile outputFile&;卷曲https://my-webhook-receiver.org">
从技术上讲,它是有效的,但我担心时间问题。curl请求可能是在批处理服务将结果文件推回到blob存储之前完成的。如果它是一个大文件,并且可能需要半分钟才能上传,我会在文件存在于输出容器之前收到通知。
-
使用blob存储事件系统这样做的好处是结果文件显然已经到达。但是,如果工作失败了怎么办?它永远不会被触发。。。
-
批量警报系统显然,您可以为某些批处理事件(例如任务完成(创建警报,然后将其连接到操作组,最后连接到网络挂钩。这个电话对吗?这感觉有点粗糙,不是使用这个系统的正确方式。
是否有一种方法可以将azure批处理与例如azure事件网格直接连接?什么是";正确的";让我的服务器知道编码文件准备好了吗?
有几种方法可以处理这一问题,尽管无可否认,其中一些解决方案并不十分优雅:
- 在每个任务上创建一个任务依赖项。依赖任务是调用webhook的任务。您可以使依赖任务被调用,即使它所依赖的任务因某些退出代码而失败。您还可以创建一个";合并任务";这取决于工作中的所有任务,这些任务可以让你知道什么时候一切都完成了
- 请改用作业管理器任务。作业管理器通常用于监控工作流的进展并生成其他任务,因此您可以查询任务完成状态(成功或失败(,并通过此任务或作业管理器生成的任务发送webhook命令
- 使用作业发布机制在作业完成时运行操作。这不能解决每个任务的通知问题,但可以用作作业完成信号