Azure批处理服务在作业完成时添加webhook



我已经为使用ffmpeg的媒体文件编码设置了一个批处理服务。每个作业可以包含多个任务,每个任务将编码一个文件。我使用特定于任务的资源和输出文件系统,因此批处理服务会自动从blob存储中获取文件并将文件传递到blob存储。

但是:我怎么知道工作或任务已经完成或失败?由于这项工作可能需要很长时间——在低优先级节点上更是如此——我需要某种webhook或事件。对作业状态进行连续轮询是不可行的。

我能想到的选择:

  1. 运行ffmpeg命令后,连接一个curl命令。类似于:

"命令行":"bin/bash-c";ffmpeg-i inputFile outputFile&卷曲https://my-webhook-receiver.org">

从技术上讲,它是有效的,但我担心时间问题。curl请求可能是在批处理服务将结果文件推回到blob存储之前完成的。如果它是一个大文件,并且可能需要半分钟才能上传,我会在文件存在于输出容器之前收到通知。

  1. 使用blob存储事件系统这样做的好处是结果文件显然已经到达。但是,如果工作失败了怎么办?它永远不会被触发。。。

  2. 批量警报系统显然,您可以为某些批处理事件(例如任务完成(创建警报,然后将其连接到操作组,最后连接到网络挂钩。这个电话对吗?这感觉有点粗糙,不是使用这个系统的正确方式。

是否有一种方法可以将azure批处理与例如azure事件网格直接连接?什么是";正确的";让我的服务器知道编码文件准备好了吗?

有几种方法可以处理这一问题,尽管无可否认,其中一些解决方案并不十分优雅:

  1. 在每个任务上创建一个任务依赖项。依赖任务是调用webhook的任务。您可以使依赖任务被调用,即使它所依赖的任务因某些退出代码而失败。您还可以创建一个";合并任务";这取决于工作中的所有任务,这些任务可以让你知道什么时候一切都完成了
  2. 请改用作业管理器任务。作业管理器通常用于监控工作流的进展并生成其他任务,因此您可以查询任务完成状态(成功或失败(,并通过此任务或作业管理器生成的任务发送webhook命令
  3. 使用作业发布机制在作业完成时运行操作。这不能解决每个任务的通知问题,但可以用作作业完成信号

最新更新