1

升级到 WebJobs 0.3 beta 后,Azure WebJobs 在将 Blob 发布到存储时多次调用我的方法(使用 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 仪表板中,它确实显示了被调用两次的函数。

为什么是这样?

4

2 回答 2

3

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

于 2014-09-18T16:47:52.237 回答
2

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

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

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

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

您遇到的是案例 3。解决方法是在处理 blob 后将其移动到不同的容器/目录中,这样就不会再次被选中。

于 2014-07-15T03:36:17.500 回答