BlobTrigger在Azure WebJobs 0.3 Beta中多次触发作业

时间:2014-07-15 00:32:56

标签: azure-webjobs azure-webjobssdk

升级到WebJobs 0.3 beta后,当blob发布到存储时,Azure WebJobs会多次调用我的方法(使用BlobTrigger作为输入)。在控制台本地测试和Azure中都会发生这种情况。 就我而言,我正在使用BlobTrigger,然后发布到队列中,如下所示:

        public static void ProcessFactoryFileSubmission(
        [BlobTrigger(blobs.RESPONSE + "/{requestId}_{factoryId}_{filename}")] ICloudBlob blob,
        [Table(tables.PACKAGE)] CloudTable table,
        [Queue(queues.FACTORY_RESPONSE)] out FactoryPackageResponseMessage responseQueue)

队列收到两条消息,在webjobs azure仪表板中,它确实显示了被调用两次的函数。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

此问题在0.5.0-beta时已修复。只有在检测到新blob或更新现有blob时才会触发BlobTriggers。 有关详细信息,请参阅此帖http://azure.microsoft.com/blog/2014/09/06/announcing-the-0-5-0-beta-preview-of-microsoft-azure-webjobs-sdk/

答案 1 :(得分:2)

pianomanjh,这是一个已知的限制。触发器和输出的一些组合不能很好地发挥作用。让我解释一下这是如何在内部工作的,以及为什么这个案例不起作用:

案例1:BlobTrigger(输入)+ Blob(输出):很容易知道输入blob是否通过查找输出blob来处理,输出blob必须存在且更新。

案例2:QueueTrigger(输入)+任何输出:很容易知道输入是否被处理,因为队列消息在被处理后被删除。

案例3:BlobTrigger(输入)+队列(输出):由于队列中的消息可能存在或可能不存在,因此不容易知道是否处理了输入blob。此外,我们不会在blob上存储任何元数据,以了解它是否由特定函数处理。

你正在遇到案例3.解决这个问题的方法是在blob被处理后将其移动到另一个容器/目录中,这样就不会再次选择它了。